Fixes pod-readback labeling issue.

This commit is contained in:
benbierens 2023-10-31 15:04:59 +01:00
parent a6f7bc2393
commit fcb5a527a9
No known key found for this signature in database
GPG Key ID: FE44815D96D0A1AA
1 changed files with 40 additions and 19 deletions

View File

@ -37,13 +37,26 @@ namespace KubernetesWorkflow
var deploymentName = CreateDeployment(containerRecipes, location, podLabel); var deploymentName = CreateDeployment(containerRecipes, location, podLabel);
var (serviceName, servicePortsMap) = CreateService(containerRecipes); var (serviceName, servicePortsMap) = CreateService(containerRecipes);
var pods = client.Run(c => c.ListNamespacedPod(K8sNamespace)); var pod = FindPodByLabel(podLabel);
var pod = pods.Items.Single(p => p.Labels().Any(l => l.Key == podLabelKey && l.Value == podLabel));
var podInfo = CreatePodInfo(pod); var podInfo = CreatePodInfo(pod);
return new RunningPod(cluster, podInfo, deploymentName, serviceName, servicePortsMap.ToArray()); return new RunningPod(cluster, podInfo, deploymentName, serviceName, servicePortsMap.ToArray());
} }
private V1Pod FindPodByLabel(string podLabel)
{
var pods = client.Run(c => c.ListNamespacedPod(K8sNamespace));
foreach (var pod in pods.Items)
{
var label = pod.GetLabel(podLabelKey);
if (label == podLabel)
{
return pod;
}
}
throw new Exception("Unable to find pod by label.");
}
public void Stop(RunningPod pod) public void Stop(RunningPod pod)
{ {
log.Debug(); log.Debug();
@ -468,23 +481,7 @@ namespace KubernetesWorkflow
private V1Volume CreateVolume(VolumeMount v) private V1Volume CreateVolume(VolumeMount v)
{ {
client.Run(c => c.CreateNamespacedPersistentVolumeClaim(new V1PersistentVolumeClaim CreatePersistentVolumeClaimIfNeeded(v);
{
ApiVersion = "v1",
Metadata = new V1ObjectMeta
{
Name = v.VolumeName,
},
Spec = new V1PersistentVolumeClaimSpec
{
AccessModes = new List<string>
{
"ReadWriteOnce"
},
Resources = CreateVolumeResourceRequirements(v),
},
}, K8sNamespace));
if (!string.IsNullOrEmpty(v.HostPath)) if (!string.IsNullOrEmpty(v.HostPath))
{ {
@ -517,6 +514,30 @@ namespace KubernetesWorkflow
}; };
} }
private void CreatePersistentVolumeClaimIfNeeded(VolumeMount v)
{
var pvcs = client.Run(c => c.ListNamespacedPersistentVolumeClaim(K8sNamespace));
if (pvcs != null && pvcs.Items.Any(i => i.Name() != v.VolumeName)) return;
client.Run(c => c.CreateNamespacedPersistentVolumeClaim(new V1PersistentVolumeClaim
{
ApiVersion = "v1",
Metadata = new V1ObjectMeta
{
Name = v.VolumeName,
},
Spec = new V1PersistentVolumeClaimSpec
{
AccessModes = new List<string>
{
"ReadWriteOnce"
},
Resources = CreateVolumeResourceRequirements(v),
},
}, K8sNamespace));
}
private V1SecretVolumeSource CreateVolumeSecret(VolumeMount v) private V1SecretVolumeSource CreateVolumeSecret(VolumeMount v)
{ {
if (string.IsNullOrWhiteSpace(v.Secret)) return null!; if (string.IsNullOrWhiteSpace(v.Secret)) return null!;