Skip to content

Commit 9f879b8

Browse files
Handle IndexOutOfBoundsException when container hasn't been brought up.
* The pod status will be pending and this can be viewed in the agent status report now.
1 parent e327104 commit 9f879b8

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

Diff for: src/main/java/cd/go/contrib/elasticagent/executors/AgentStatusReportExecutor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public AgentStatusReportExecutor(AgentStatusReportRequest request, PluginRequest
4747
this(request, pluginRequest, KubernetesClientFactory.instance(), PluginStatusReportViewBuilder.instance());
4848
}
4949

50-
public AgentStatusReportExecutor(AgentStatusReportRequest request, PluginRequest pluginRequest, KubernetesClientFactory kubernetesClientFactory, PluginStatusReportViewBuilder builder) {
50+
AgentStatusReportExecutor(AgentStatusReportRequest request, PluginRequest pluginRequest, KubernetesClientFactory kubernetesClientFactory, PluginStatusReportViewBuilder builder) {
5151
this.request = request;
5252
this.pluginRequest = pluginRequest;
5353
this.factory = kubernetesClientFactory;

Diff for: src/main/java/cd/go/contrib/elasticagent/model/reports/agent/GoCDContainerDetails.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,14 @@ public static GoCDContainerDetails fromContainer(Container container, ContainerS
3131
for (EnvVar var : container.getEnv()) {
3232
containerDetails.env.add(new EnvironmentVariable(var.getName(), var.getValue()));
3333
}
34-
35-
containerDetails.ready = containerStatus.getReady();
36-
containerDetails.restartCount = containerStatus.getRestartCount();
34+
if (containerStatus != null) {
35+
containerDetails.ready = containerStatus.getReady();
36+
containerDetails.restartCount = containerStatus.getRestartCount();
37+
}
38+
else {
39+
containerDetails.ready = false;
40+
containerDetails.restartCount = 0;
41+
}
3742

3843
return containerDetails;
3944
}

Diff for: src/main/java/cd/go/contrib/elasticagent/model/reports/agent/KubernetesElasticAgent.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
import com.fasterxml.jackson.core.JsonProcessingException;
2222
import com.fasterxml.jackson.databind.ObjectMapper;
2323
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
24+
import io.fabric8.kubernetes.api.model.ContainerStatus;
2425
import io.fabric8.kubernetes.api.model.Event;
2526
import io.fabric8.kubernetes.api.model.Pod;
2627
import io.fabric8.kubernetes.client.KubernetesClient;
2728

2829
import java.util.ArrayList;
30+
import java.util.List;
2931

3032
public class KubernetesElasticAgent {
3133
private JobIdentifier jobIdentifier;
@@ -41,7 +43,9 @@ public static KubernetesElasticAgent fromPod(KubernetesClient client, Pod pod, J
4143
agent.jobIdentifier = getJobIdentifier(pod, jobIdentifier);
4244
agent.elasticAgentId = pod.getMetadata().getName();
4345
agent.podDetails = KubernetesPodDetails.fromPod(pod);
44-
agent.agentDetails = GoCDContainerDetails.fromContainer(pod.getSpec().getContainers().get(0), pod.getStatus().getContainerStatuses().get(0));
46+
List<ContainerStatus> containerStatuses = pod.getStatus().getContainerStatuses();
47+
ContainerStatus containerStatus = containerStatuses.isEmpty() ? null : containerStatuses.get(0);
48+
agent.agentDetails = GoCDContainerDetails.fromContainer(pod.getSpec().getContainers().get(0), containerStatus);
4549
agent.events = getAllEventsForPod(pod, client);
4650
agent.logs = getPodLogs(pod, client);
4751
agent.configuration = getPodConfiguration(pod);

Diff for: src/test/java/cd/go/contrib/elasticagent/executors/AgentStatusReportExecutorTest.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050

5151
public class AgentStatusReportExecutorTest {
5252

53-
private Pod pod;
5453
private AgentStatusReportExecutor executor;
5554
private String elasticAgentId = "elastic-agent-id";
5655

@@ -93,7 +92,7 @@ public class AgentStatusReportExecutorTest {
9392
@Before
9493
public void setUp() {
9594
initMocks(this);
96-
pod = createDefaultPod();
95+
Pod pod = createDefaultPod();
9796
pod.getMetadata().setName(elasticAgentId);
9897
executor = new AgentStatusReportExecutor(statusReportRequest, pluginRequest, kubernetesClientFactory, builder);
9998

0 commit comments

Comments
 (0)