From fc5285ac9952c951d874e0a5263459d8c01d0eea Mon Sep 17 00:00:00 2001 From: "angelo.andreussi" Date: Mon, 3 Feb 2025 16:34:16 +0100 Subject: [PATCH 1/5] feature: added required classes for job step on inventory-containers start and stop --- pom.xml | 5 ++ service/device/management/all/job/pom.xml | 4 ++ .../device/management/inventory/job/pom.xml | 40 +++++++++++++ .../job/DeviceContainerJobModule.java | 37 ++++++++++++ .../DeviceContainerStartTargetProcessor.java | 53 ++++++++++++++++++ .../DeviceContainerStopTargetProcessor.java | 54 ++++++++++++++++++ .../DeviceContainerPropertyKeys.java | 24 ++++++++ ...DeviceContainerStartJobStepDefinition.java | 56 +++++++++++++++++++ .../DeviceContainerStopJobStepDefinition.java | 56 +++++++++++++++++++ service/device/management/inventory/pom.xml | 1 + 10 files changed, 330 insertions(+) create mode 100644 service/device/management/inventory/job/pom.xml create mode 100644 service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerJobModule.java create mode 100644 service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java create mode 100644 service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java create mode 100644 service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java create mode 100644 service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java create mode 100644 service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java diff --git a/pom.xml b/pom.xml index 34565661301..b5e752db486 100644 --- a/pom.xml +++ b/pom.xml @@ -795,6 +795,11 @@ kapua-device-management-command-job ${project.version} + + org.eclipse.kapua + kapua-device-management-inventory-job + ${project.version} + org.eclipse.kapua kapua-device-management-configuration-api diff --git a/service/device/management/all/job/pom.xml b/service/device/management/all/job/pom.xml index 8d93265ac07..68dcadc77a7 100644 --- a/service/device/management/all/job/pom.xml +++ b/service/device/management/all/job/pom.xml @@ -49,6 +49,10 @@ org.eclipse.kapua kapua-device-management-packages-job + + org.eclipse.kapua + kapua-device-management-inventory-job + diff --git a/service/device/management/inventory/job/pom.xml b/service/device/management/inventory/job/pom.xml new file mode 100644 index 00000000000..cd075c33012 --- /dev/null +++ b/service/device/management/inventory/job/pom.xml @@ -0,0 +1,40 @@ + + + + 4.0.0 + + org.eclipse.kapua + kapua-device-management-inventory + 2.1.0-SNAPSHOT + + + kapua-device-management-inventory-job + + + org.eclipse.kapua + kapua-job-api + + + org.eclipse.kapua + kapua-device-management-inventory-api + + + org.eclipse.kapua + kapua-job-engine-commons + + + + \ No newline at end of file diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerJobModule.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerJobModule.java new file mode 100644 index 00000000000..3c68f1fa876 --- /dev/null +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerJobModule.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Eurotech - initial API and implementation + *******************************************************************************/ +package org.eclipse.kapua.service.device.management.inventory.job; + +import com.google.inject.multibindings.ProvidesIntoSet; +import org.eclipse.kapua.commons.core.AbstractKapuaModule; +import org.eclipse.kapua.service.device.management.inventory.job.definition.DeviceContainerStartJobStepDefinition; +import org.eclipse.kapua.service.device.management.inventory.job.definition.DeviceContainerStopJobStepDefinition; +import org.eclipse.kapua.service.job.step.definition.JobStepDefinition; + +public class DeviceContainerJobModule extends AbstractKapuaModule { + + @Override + protected void configureModule() { + } + + @ProvidesIntoSet + public JobStepDefinition deviceContainerStartJobStepDefinition() { + return new DeviceContainerStartJobStepDefinition(); + } + + @ProvidesIntoSet + public JobStepDefinition deviceContainerStopJobStepDefinition() { + return new DeviceContainerStopJobStepDefinition(); + } + +} \ No newline at end of file diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java new file mode 100644 index 00000000000..66571938a84 --- /dev/null +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2017, 2022 Eurotech and/or its affiliates and others + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Eurotech - initial API and implementation + *******************************************************************************/ +package org.eclipse.kapua.service.device.management.inventory.job; + +import org.eclipse.kapua.KapuaException; +import org.eclipse.kapua.commons.security.KapuaSecurityUtils; +import org.eclipse.kapua.job.engine.commons.operation.AbstractDeviceTargetProcessor; +import org.eclipse.kapua.job.engine.commons.wrappers.JobTargetWrapper; +import org.eclipse.kapua.service.device.management.inventory.DeviceInventoryManagementService; +import org.eclipse.kapua.service.device.management.inventory.job.definition.DeviceContainerPropertyKeys; +import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; +import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainerAction; +import org.eclipse.kapua.service.job.operation.TargetProcessor; +import org.eclipse.kapua.service.job.targets.JobTarget; + +import javax.batch.runtime.context.JobContext; +import javax.batch.runtime.context.StepContext; +import javax.inject.Inject; + +public class DeviceContainerStartTargetProcessor extends AbstractDeviceTargetProcessor implements TargetProcessor { + + @Inject + DeviceInventoryManagementService deviceInventoryManagementService; + @Inject + JobContext jobContext; + @Inject + StepContext stepContext; + + @Override + protected void initProcessing(JobTargetWrapper wrappedJobTarget) { + setContext(jobContext, stepContext); + } + + @Override + public void processTarget(JobTarget jobTarget) throws KapuaException { + + DeviceInventoryContainer containerInput = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_INPUT, DeviceInventoryContainer.class); + Long timeout = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.TIMEOUT, Long.class); + + KapuaSecurityUtils.doPrivileged(() -> deviceInventoryManagementService.execContainer(jobTarget.getScopeId(), jobTarget.getJobTargetId(), containerInput, DeviceInventoryContainerAction.START, timeout)); + } +} + diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java new file mode 100644 index 00000000000..2c282d1b84a --- /dev/null +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2017, 2022 Eurotech and/or its affiliates and others + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Eurotech - initial API and implementation + *******************************************************************************/ +package org.eclipse.kapua.service.device.management.inventory.job; + +import org.eclipse.kapua.KapuaException; +import org.eclipse.kapua.commons.security.KapuaSecurityUtils; +import org.eclipse.kapua.job.engine.commons.operation.AbstractDeviceTargetProcessor; +import org.eclipse.kapua.job.engine.commons.wrappers.JobTargetWrapper; +import org.eclipse.kapua.service.device.management.inventory.DeviceInventoryManagementService; +import org.eclipse.kapua.service.device.management.inventory.job.definition.DeviceContainerPropertyKeys; +import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; +import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainerAction; +import org.eclipse.kapua.service.job.operation.TargetProcessor; +import org.eclipse.kapua.service.job.targets.JobTarget; + +import javax.batch.runtime.context.JobContext; +import javax.batch.runtime.context.StepContext; +import javax.inject.Inject; + +public class DeviceContainerStopTargetProcessor extends AbstractDeviceTargetProcessor implements TargetProcessor { + + @Inject + DeviceInventoryManagementService deviceInventoryManagementService; + @Inject + JobContext jobContext; + @Inject + StepContext stepContext; + + @Override + protected void initProcessing(JobTargetWrapper wrappedJobTarget) { + setContext(jobContext, stepContext); + } + + @Override + public void processTarget(JobTarget jobTarget) throws KapuaException { + + DeviceInventoryContainer containerInput = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_INPUT, DeviceInventoryContainer.class); + Long timeout = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.TIMEOUT, Long.class); + + KapuaSecurityUtils.doPrivileged(() -> deviceInventoryManagementService.execContainer(jobTarget.getScopeId(), jobTarget.getJobTargetId(), containerInput, DeviceInventoryContainerAction.STOP, timeout)); + } +} + + diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java new file mode 100644 index 00000000000..ce9d43be8e9 --- /dev/null +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2017, 2022 Eurotech and/or its affiliates and others + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Eurotech - initial API and implementation + *******************************************************************************/ +package org.eclipse.kapua.service.device.management.inventory.job.definition; + +import org.eclipse.kapua.service.job.step.definition.JobPropertyKey; + +public class DeviceContainerPropertyKeys implements JobPropertyKey { + + public static final String CONTAINER_INPUT = "containerInput"; + public static final String TIMEOUT = "timeout"; + + private DeviceContainerPropertyKeys() { + } +} diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java new file mode 100644 index 00000000000..b92d57f620a --- /dev/null +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2017, 2022 Eurotech and/or its affiliates and others + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Eurotech - initial API and implementation + *******************************************************************************/ +package org.eclipse.kapua.service.device.management.inventory.job.definition; + +import com.beust.jcommander.internal.Lists; +import org.eclipse.kapua.service.device.management.inventory.job.DeviceContainerStartTargetProcessor; +import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; +import org.eclipse.kapua.service.job.step.definition.JobStepDefinitionRecord; +import org.eclipse.kapua.service.job.step.definition.JobStepPropertyRecord; +import org.eclipse.kapua.service.job.step.definition.JobStepType; +import org.eclipse.kapua.service.job.step.definition.device.management.TimeoutJobStepPropertyRecord; + +public class DeviceContainerStartJobStepDefinition extends JobStepDefinitionRecord { + + public DeviceContainerStartJobStepDefinition() { + super(null, + "Container Start", + "Execute request to start a container to the target devices of the Job", + JobStepType.TARGET, + null, + DeviceContainerStartTargetProcessor.class.getName(), + null, + Lists.newArrayList( + new JobStepPropertyRecord( + DeviceContainerPropertyKeys.CONTAINER_INPUT, + "XML/JSON that defines the container to be executed", + DeviceInventoryContainer.class.getName(), + null, + "{\n" + + " \"name\": \"docker_container_1\",\n" + + " \"version\": \"nginx:latest\",\n" + + " \"containerType\": \"DOCKER\",\n" + + " \"state\": \"ACTIVE\"\n" + + "}", + Boolean.TRUE, + Boolean.FALSE, + null, + null, + null, + null, + null), + new TimeoutJobStepPropertyRecord() + ) + ); + } +} \ No newline at end of file diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java new file mode 100644 index 00000000000..a61a7cfb198 --- /dev/null +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java @@ -0,0 +1,56 @@ +/******************************************************************************* + * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others + * + * This program and the accompanying materials are made + * available under the terms of the Eclipse Public License 2.0 + * which is available at https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Eurotech - initial API and implementation + *******************************************************************************/ +package org.eclipse.kapua.service.device.management.inventory.job.definition; + +import com.beust.jcommander.internal.Lists; +import org.eclipse.kapua.service.device.management.inventory.job.DeviceContainerStopTargetProcessor; +import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; +import org.eclipse.kapua.service.job.step.definition.JobStepDefinitionRecord; +import org.eclipse.kapua.service.job.step.definition.JobStepPropertyRecord; +import org.eclipse.kapua.service.job.step.definition.JobStepType; +import org.eclipse.kapua.service.job.step.definition.device.management.TimeoutJobStepPropertyRecord; + +public class DeviceContainerStopJobStepDefinition extends JobStepDefinitionRecord { + + public DeviceContainerStopJobStepDefinition() { + super(null, + "Container Stop", + "Execute request to stop a container to the target devices of the Job", + JobStepType.TARGET, + null, + DeviceContainerStopTargetProcessor.class.getName(), + null, + Lists.newArrayList( + new JobStepPropertyRecord( + DeviceContainerPropertyKeys.CONTAINER_INPUT, + "XML/JSON that defines the container to be stopped", + DeviceInventoryContainer.class.getName(), + null, + "{\n" + + " \"name\": \"docker_container_1\",\n" + + " \"version\": \"nginx:latest\",\n" + + " \"containerType\": \"DOCKER\",\n" + + " \"state\": \"ACTIVE\"\n" + + "}", + Boolean.TRUE, + Boolean.FALSE, + null, + null, + null, + null, + null), + new TimeoutJobStepPropertyRecord() + ) + ); + } +} \ No newline at end of file diff --git a/service/device/management/inventory/pom.xml b/service/device/management/inventory/pom.xml index 2a974021de2..93a63230009 100644 --- a/service/device/management/inventory/pom.xml +++ b/service/device/management/inventory/pom.xml @@ -27,6 +27,7 @@ api internal + job From 1f6668d72582a26f78b98e55e75dd0a3f8616d63 Mon Sep 17 00:00:00 2001 From: "angelo.andreussi" Date: Wed, 12 Feb 2025 11:36:45 +0100 Subject: [PATCH 2/5] fix: simplified input parameters needed to create job step for container start & stop --- .../DeviceContainerStartTargetProcessor.java | 11 ++++++- .../DeviceContainerStopTargetProcessor.java | 12 +++++++- .../DeviceContainerPropertyKeys.java | 3 +- ...DeviceContainerStartJobStepDefinition.java | 29 ++++++++++++------- .../DeviceContainerStopJobStepDefinition.java | 29 ++++++++++++------- 5 files changed, 59 insertions(+), 25 deletions(-) diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java index 66571938a84..2aa241adec8 100644 --- a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStartTargetProcessor.java @@ -16,6 +16,7 @@ import org.eclipse.kapua.commons.security.KapuaSecurityUtils; import org.eclipse.kapua.job.engine.commons.operation.AbstractDeviceTargetProcessor; import org.eclipse.kapua.job.engine.commons.wrappers.JobTargetWrapper; +import org.eclipse.kapua.service.device.management.inventory.DeviceInventoryManagementFactory; import org.eclipse.kapua.service.device.management.inventory.DeviceInventoryManagementService; import org.eclipse.kapua.service.device.management.inventory.job.definition.DeviceContainerPropertyKeys; import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; @@ -31,6 +32,9 @@ public class DeviceContainerStartTargetProcessor extends AbstractDeviceTargetPro @Inject DeviceInventoryManagementService deviceInventoryManagementService; + + @Inject + DeviceInventoryManagementFactory deviceInventoryManagementFactory; @Inject JobContext jobContext; @Inject @@ -44,9 +48,14 @@ protected void initProcessing(JobTargetWrapper wrappedJobTarget) { @Override public void processTarget(JobTarget jobTarget) throws KapuaException { - DeviceInventoryContainer containerInput = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_INPUT, DeviceInventoryContainer.class); + String containerName = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_NAME, String.class); + String containerVersion = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_VERSION, String.class); Long timeout = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.TIMEOUT, Long.class); + DeviceInventoryContainer containerInput = deviceInventoryManagementFactory.newDeviceInventoryContainer(); + containerInput.setName(containerName); + containerInput.setVersion(containerVersion); + KapuaSecurityUtils.doPrivileged(() -> deviceInventoryManagementService.execContainer(jobTarget.getScopeId(), jobTarget.getJobTargetId(), containerInput, DeviceInventoryContainerAction.START, timeout)); } } diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java index 2c282d1b84a..74fe1fc203b 100644 --- a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/DeviceContainerStopTargetProcessor.java @@ -16,6 +16,7 @@ import org.eclipse.kapua.commons.security.KapuaSecurityUtils; import org.eclipse.kapua.job.engine.commons.operation.AbstractDeviceTargetProcessor; import org.eclipse.kapua.job.engine.commons.wrappers.JobTargetWrapper; +import org.eclipse.kapua.service.device.management.inventory.DeviceInventoryManagementFactory; import org.eclipse.kapua.service.device.management.inventory.DeviceInventoryManagementService; import org.eclipse.kapua.service.device.management.inventory.job.definition.DeviceContainerPropertyKeys; import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; @@ -31,6 +32,10 @@ public class DeviceContainerStopTargetProcessor extends AbstractDeviceTargetProc @Inject DeviceInventoryManagementService deviceInventoryManagementService; + + @Inject + DeviceInventoryManagementFactory deviceInventoryManagementFactory; + @Inject JobContext jobContext; @Inject @@ -44,9 +49,14 @@ protected void initProcessing(JobTargetWrapper wrappedJobTarget) { @Override public void processTarget(JobTarget jobTarget) throws KapuaException { - DeviceInventoryContainer containerInput = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_INPUT, DeviceInventoryContainer.class); + String containerName = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_NAME, String.class); + String containerVersion = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.CONTAINER_VERSION, String.class); Long timeout = stepContextWrapper.getStepProperty(DeviceContainerPropertyKeys.TIMEOUT, Long.class); + DeviceInventoryContainer containerInput = deviceInventoryManagementFactory.newDeviceInventoryContainer(); + containerInput.setName(containerName); + containerInput.setVersion(containerVersion); + KapuaSecurityUtils.doPrivileged(() -> deviceInventoryManagementService.execContainer(jobTarget.getScopeId(), jobTarget.getJobTargetId(), containerInput, DeviceInventoryContainerAction.STOP, timeout)); } } diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java index ce9d43be8e9..db1f9edfac1 100644 --- a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerPropertyKeys.java @@ -16,7 +16,8 @@ public class DeviceContainerPropertyKeys implements JobPropertyKey { - public static final String CONTAINER_INPUT = "containerInput"; + public static final String CONTAINER_NAME = "containerName"; + public static final String CONTAINER_VERSION = "containerVersion"; public static final String TIMEOUT = "timeout"; private DeviceContainerPropertyKeys() { diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java index b92d57f620a..f776ad0399e 100644 --- a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStartJobStepDefinition.java @@ -14,7 +14,6 @@ import com.beust.jcommander.internal.Lists; import org.eclipse.kapua.service.device.management.inventory.job.DeviceContainerStartTargetProcessor; -import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; import org.eclipse.kapua.service.job.step.definition.JobStepDefinitionRecord; import org.eclipse.kapua.service.job.step.definition.JobStepPropertyRecord; import org.eclipse.kapua.service.job.step.definition.JobStepType; @@ -32,16 +31,24 @@ public DeviceContainerStartJobStepDefinition() { null, Lists.newArrayList( new JobStepPropertyRecord( - DeviceContainerPropertyKeys.CONTAINER_INPUT, - "XML/JSON that defines the container to be executed", - DeviceInventoryContainer.class.getName(), - null, - "{\n" + - " \"name\": \"docker_container_1\",\n" + - " \"version\": \"nginx:latest\",\n" + - " \"containerType\": \"DOCKER\",\n" + - " \"state\": \"ACTIVE\"\n" + - "}", + DeviceContainerPropertyKeys.CONTAINER_NAME, + "Name of the container to be executed", + String.class.getName(), + null, + null, + Boolean.TRUE, + Boolean.FALSE, + null, + null, + null, + null, + null), + new JobStepPropertyRecord( + DeviceContainerPropertyKeys.CONTAINER_VERSION, + "Version of the container to be executed", + String.class.getName(), + null, + null, Boolean.TRUE, Boolean.FALSE, null, diff --git a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java index a61a7cfb198..8f80267c1e6 100644 --- a/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java +++ b/service/device/management/inventory/job/src/main/java/org/eclipse/kapua/service/device/management/inventory/job/definition/DeviceContainerStopJobStepDefinition.java @@ -14,7 +14,6 @@ import com.beust.jcommander.internal.Lists; import org.eclipse.kapua.service.device.management.inventory.job.DeviceContainerStopTargetProcessor; -import org.eclipse.kapua.service.device.management.inventory.model.container.DeviceInventoryContainer; import org.eclipse.kapua.service.job.step.definition.JobStepDefinitionRecord; import org.eclipse.kapua.service.job.step.definition.JobStepPropertyRecord; import org.eclipse.kapua.service.job.step.definition.JobStepType; @@ -32,16 +31,24 @@ public DeviceContainerStopJobStepDefinition() { null, Lists.newArrayList( new JobStepPropertyRecord( - DeviceContainerPropertyKeys.CONTAINER_INPUT, - "XML/JSON that defines the container to be stopped", - DeviceInventoryContainer.class.getName(), - null, - "{\n" + - " \"name\": \"docker_container_1\",\n" + - " \"version\": \"nginx:latest\",\n" + - " \"containerType\": \"DOCKER\",\n" + - " \"state\": \"ACTIVE\"\n" + - "}", + DeviceContainerPropertyKeys.CONTAINER_NAME, + "Name of the container to be executed", + String.class.getName(), + null, + null, + Boolean.TRUE, + Boolean.FALSE, + null, + null, + null, + null, + null), + new JobStepPropertyRecord( + DeviceContainerPropertyKeys.CONTAINER_VERSION, + "Version of the container to be executed", + String.class.getName(), + null, + null, Boolean.TRUE, Boolean.FALSE, null, From 3c3b61c5ec253e4c1a921102599629c691ba603a Mon Sep 17 00:00:00 2001 From: "angelo.andreussi" Date: Fri, 14 Feb 2025 17:07:54 +0100 Subject: [PATCH 3/5] fix: added test scenario for inventory - container start and stop job step --- .../jobEngine/RunJobEngineServiceI9nTest.java | 15 ++-- ...EngineServiceProcessorInventoryI9n.feature | 79 +++++++++++++++++++ 2 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 qa/integration/src/test/resources/features/jobEngine/JobEngineServiceProcessorInventoryI9n.feature diff --git a/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java b/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java index fa4758d8275..bf20e43ceac 100644 --- a/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java +++ b/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java @@ -19,13 +19,14 @@ @RunWith(Cucumber.class) @CucumberOptions( features = { - "classpath:features/jobEngine/JobEngineServiceOperations.feature", - "classpath:features/jobEngine/JobEngineServiceProcessorAssetI9n.feature", - "classpath:features/jobEngine/JobEngineServiceProcessorBundleI9n.feature", - "classpath:features/jobEngine/JobEngineServiceProcessorCommandI9n.feature", - "classpath:features/jobEngine/JobEngineServiceProcessorConfigurationI9n.feature", - "classpath:features/jobEngine/JobEngineServiceProcessorKeystoreI9n.feature", - "classpath:features/jobEngine/JobEngineServiceProcessorPackagesI9n.feature", +// "classpath:features/jobEngine/JobEngineServiceOperations.feature", +// "classpath:features/jobEngine/JobEngineServiceProcessorAssetI9n.feature", +// "classpath:features/jobEngine/JobEngineServiceProcessorBundleI9n.feature", +// "classpath:features/jobEngine/JobEngineServiceProcessorCommandI9n.feature", +// "classpath:features/jobEngine/JobEngineServiceProcessorConfigurationI9n.feature", +// "classpath:features/jobEngine/JobEngineServiceProcessorKeystoreI9n.feature", +// "classpath:features/jobEngine/JobEngineServiceProcessorPackagesI9n.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorInventoryI9n.feature" }, glue = { "org.eclipse.kapua.service.job.steps", diff --git a/qa/integration/src/test/resources/features/jobEngine/JobEngineServiceProcessorInventoryI9n.feature b/qa/integration/src/test/resources/features/jobEngine/JobEngineServiceProcessorInventoryI9n.feature new file mode 100644 index 00000000000..14e00dc2b39 --- /dev/null +++ b/qa/integration/src/test/resources/features/jobEngine/JobEngineServiceProcessorInventoryI9n.feature @@ -0,0 +1,79 @@ +############################################################################### +# Copyright (c) 2024, 2024 Eurotech and/or its affiliates and others +# +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Eurotech - initial API and implementation +############################################################################### +@env_docker +@it +@jobEngine +@jobEngineTargetProcessors + +Feature: Job Engine Service - Inventory Step Processors + Tests for Device Management Inventory Processor + + @setup + Scenario: Setup test resources + Given Init Security Context + And Start Docker environment with resources + | db | + | events-broker | + | job-engine | + | message-broker | + | broker-auth-service | + | consumer-lifecycle | + + Scenario: Container Start + + Given I login as user with name "kapua-sys" and password "kapua-password" + And I start the Kura Mock + And Device birth message is sent + And Device "rpione3" is connected within 10s + And I create a job with the name "TestJob" + And I add device targets to job + | rpione3 | + And I search for step definition with the name + | Container Start | + And I add job step to job with name "Test Step - Container Start" and with selected job step definition and properties + | name | type | value | + | containerName | java.lang.String | db | + | containerVersion | java.lang.String | kapua/kapua-sql:latest | + | timeout | java.lang.Long | 5000 | + When I start a job + And I wait job to finish its execution up to 10s + Then I confirm that job has 1 job execution + And I confirm that job target in job has step index 0 and status "PROCESS_OK" + + Scenario: Container Stop + + Given I login as user with name "kapua-sys" and password "kapua-password" + And I start the Kura Mock + And Device birth message is sent + And Device "rpione3" is connected within 10s + And I create a job with the name "TestJob" + And I add device targets to job + | rpione3 | + And I search for step definition with the name + | Container Stop | + And I add job step to job with name "Test Step - Container Stop" and with selected job step definition and properties + | name | type | value | + | containerName | java.lang.String | db | + | containerVersion | java.lang.String | kapua/kapua-sql:latest | + | timeout | java.lang.Long | 5000 | + When I start a job + And I wait job to finish its execution up to 10s + Then I confirm that job has 1 job execution + And I confirm that job target in job has step index 0 and status "PROCESS_OK" + + @teardown + Scenario: Tear down test resources + Given I logout + And KuraMock is disconnected + And Stop Docker environment + And Clean Locator Instance \ No newline at end of file From 078b0a52c49c04c8860e5bbdb996778137b79906 Mon Sep 17 00:00:00 2001 From: "angelo.andreussi" Date: Mon, 17 Feb 2025 16:55:22 +0100 Subject: [PATCH 4/5] fix: refactored delete sql script for tests to consider new job step definitions with a random id --- qa/common/src/main/resources/sql/all_delete.sql | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/qa/common/src/main/resources/sql/all_delete.sql b/qa/common/src/main/resources/sql/all_delete.sql index 81af0ea8b29..2c716830d2e 100644 --- a/qa/common/src/main/resources/sql/all_delete.sql +++ b/qa/common/src/main/resources/sql/all_delete.sql @@ -92,11 +92,7 @@ FROM job_job_step; DELETE FROM job_job_step_definition -WHERE id NOT IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - -DELETE -FROM job_job_step_definition_properties -WHERE step_definition_id NOT IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); +WHERE name NOT IN ('Asset Write','Bundle Start','Bundle Stop','Command Execution','Configuration Put','Keystore Certificate Create','Keystore Keypair Create','Keystore Item Delete','Package Download / Install','Package Uninstall','Container Start','Container Stop'); DELETE FROM job_job_step_properties; From 9502b40e69f7abae0968a2770212d798a379d0a7 Mon Sep 17 00:00:00 2001 From: "angelo.andreussi" Date: Mon, 17 Feb 2025 16:56:10 +0100 Subject: [PATCH 5/5] fix: restored missing feature files --- .../jobEngine/RunJobEngineServiceI9nTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java b/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java index bf20e43ceac..1de18907bcc 100644 --- a/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java +++ b/qa/integration/src/test/java/org/eclipse/kapua/integration/service/jobEngine/RunJobEngineServiceI9nTest.java @@ -19,13 +19,13 @@ @RunWith(Cucumber.class) @CucumberOptions( features = { -// "classpath:features/jobEngine/JobEngineServiceOperations.feature", -// "classpath:features/jobEngine/JobEngineServiceProcessorAssetI9n.feature", -// "classpath:features/jobEngine/JobEngineServiceProcessorBundleI9n.feature", -// "classpath:features/jobEngine/JobEngineServiceProcessorCommandI9n.feature", -// "classpath:features/jobEngine/JobEngineServiceProcessorConfigurationI9n.feature", -// "classpath:features/jobEngine/JobEngineServiceProcessorKeystoreI9n.feature", -// "classpath:features/jobEngine/JobEngineServiceProcessorPackagesI9n.feature", + "classpath:features/jobEngine/JobEngineServiceOperations.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorAssetI9n.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorBundleI9n.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorCommandI9n.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorConfigurationI9n.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorKeystoreI9n.feature", + "classpath:features/jobEngine/JobEngineServiceProcessorPackagesI9n.feature", "classpath:features/jobEngine/JobEngineServiceProcessorInventoryI9n.feature" }, glue = {