nodeRequirements
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/model/nodecandidate/NodeRequirement.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/model/nodecandidate/NodeRequirement.groovy
new file mode 100644
index 0000000..aa7ee23
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/model/nodecandidate/NodeRequirement.groovy
@@ -0,0 +1,5 @@
+package eu.nebulouscloud.exn.modules.sal.model.nodecandidate
+
+interface NodeRequirement {
+
+}
\ No newline at end of file
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/model/nodecandidate/NodeTypeRequirement.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/model/nodecandidate/NodeTypeRequirement.groovy
new file mode 100644
index 0000000..e139f65
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/model/nodecandidate/NodeTypeRequirement.groovy
@@ -0,0 +1,4 @@
+package eu.nebulouscloud.exn.modules.sal.model.nodecandidate
+
+class NodeTypeRequirement implements NodeRequirement{
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/AbstractProcessor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/AbstractProcessor.groovy
new file mode 100644
index 0000000..9d6106f
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/AbstractProcessor.groovy
@@ -0,0 +1,91 @@
+package eu.nebulouscloud.exn.modules.sal.processors
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.apache.commons.lang3.StringUtils
+import org.apache.qpid.protonj2.client.impl.ClientMessage
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpStatus
+import org.springframework.web.client.HttpServerErrorException
+
+/**
+ * If no license is here then you can whatever you like!
+ * and of course I am not liable
+ *
+ * Created by fotis on 21/02/20.
+ */
+abstract class AbstractProcessor implements Processor {
+
+ Logger logger = LoggerFactory.getLogger(getClass())
+
+ @Autowired
+ ObjectMapper mapper
+
+ @Override
+ Map process(String destination, ClientMessage message) {
+
+ //Maybe move it to message property(?) and don't blend with application's payload
+ Map payload = message.body() as Map
+ Map metaData = payload.metaData as Map
+ String o = payload.body
+
+ Map ret = [:]
+
+ logger.debug("[{}] Processing {}", metaData, o)
+ String method = destination.substring(destination.lastIndexOf(".") + 1)
+ try {
+
+ switch (method) {
+ case 'get':
+ ret = get(metaData, o)
+ break;
+ case 'search':
+ ret = search(metaData, o)
+ break;
+ case 'update':
+ ret = update(metaData, o)
+ break;
+ case 'delete':
+ ret = delete(metaData, o)
+ break;
+ default:
+ ret = post(metaData,o)
+ }
+
+ } catch (HttpServerErrorException e) {
+ logger.error("[{} -> {}] Exception during gateway request for {}", metaData.user, method, o, e)
+ ret.status = HttpStatus.BAD_GATEWAY.value()
+ ret.body = ["key": "gateway-exception-error", "message": 'Gateway exception while handling request with reason' + StringUtils.substring(e.getMessage(),0,50)]
+ } catch (Exception e) {
+ logger.error("[{} -> {}] Exception for {}", metaData.user, method, o, e)
+ ret.status = HttpStatus.INTERNAL_SERVER_ERROR.value()
+// ret.body = ["key": "generic-exception-error", "message": 'Generic exception while handling request for user ' + metaData.user + ' and reason:\n' + StringUtils.left(e.getMessage(),100)]
+ ret.body = ["key": "generic-exception-error", "message": 'Generic exception while handling request for user ' + StringUtils.substring(e.getMessage(),0,50)]
+ }
+
+ metaData.status = ret.status
+// metaData.protocol = 'HTTP'
+ ret.remove('status')
+ ret.metaData = metaData
+ ret.body = mapper.writeValueAsString(ret.body)
+
+ return ret
+
+ }
+
+ Map post(Map metaData, String body) { return noop(metaData, body) }
+
+ Map search(Map metaData, String body) { return noop(metaData, body) }
+
+ Map update(Map metaData, String body) { return noop(metaData, body) }
+
+ Map get(Map metaData, String body) { return noop(metaData, body) }
+
+ Map delete(Map metaData, String body) { return noop(metaData, body) }
+
+ Map noop(Map metaData, String body) {
+ return ["status": HttpStatus.ACCEPTED.value(), "body": metaData.user + " { " + body + "}"]
+ }
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/Processor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/Processor.groovy
new file mode 100644
index 0000000..e41ee92
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/Processor.groovy
@@ -0,0 +1,14 @@
+package eu.nebulouscloud.exn.modules.sal.processors
+
+import org.apache.qpid.protonj2.client.impl.ClientMessage
+
+/**
+ * If no license is here then you can whatever you like!
+ * and of course I am not liable
+ *
+ * Created by fotis on 21/02/20.
+ */
+interface Processor {
+
+ Map process(String queue, ClientMessage message)
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/CloudProcessor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/CloudProcessor.groovy
new file mode 100644
index 0000000..0d835c3
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/CloudProcessor.groovy
@@ -0,0 +1,112 @@
+package eu.nebulouscloud.exn.modules.sal.processors.impl
+
+
+import eu.nebulouscloud.exn.modules.sal.processors.AbstractProcessor
+import eu.nebulouscloud.exn.modules.sal.repository.GatewayRepository
+import eu.nebulouscloud.exn.modules.sal.configuration.SalConfiguration
+import eu.nebulouscloud.exn.modules.sal.repository.cloud.CloudRepository
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.stereotype.Service
+
+@Service
+class CloudProcessor extends AbstractProcessor{
+
+ @Autowired
+ CloudRepository cloudRepository
+
+ @Autowired
+ GatewayRepository gatewayRepository
+
+ @Autowired
+ SalConfiguration salConfiguration
+
+ @Override
+ Map post(Map metaData, String o){
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Registering cloud {}',metaData.user, o)
+
+// User Credentials for connecting to ProActive Server.
+// SAL is a REST interface to PWS. Get it from UI or store in middleware db?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+// Deserialization should happen from calling component e.g. UI and not the proxying one
+// We just proxy the json payload, which has already been serialized by the calling component
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+ headers.setContentType(MediaType.APPLICATION_JSON)
+
+ Integer response = cloudRepository.save(o,headers,Integer.class)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": ["success": response == 0]
+ ]
+
+ }
+
+ @Override
+ Map get(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Getting clouds {}',metaData.user, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+
+ //Check jobId mentioned above
+ List response = cloudRepository.getAll(headers, List.class)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+ @Override
+ Map delete(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Deleting clouds {}',metaData.user, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+ headers.setContentType(MediaType.APPLICATION_JSON)
+
+ //Check jobId mentioned above
+ Boolean response = cloudRepository.deleteByIds('remove',o,headers,Boolean.class)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": ["success":response]
+ ]
+
+ }
+
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/JobProcessor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/JobProcessor.groovy
new file mode 100644
index 0000000..2b086ac
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/JobProcessor.groovy
@@ -0,0 +1,164 @@
+package eu.nebulouscloud.exn.modules.sal.processors.impl
+
+import eu.nebulouscloud.exn.modules.sal.configuration.SalConfiguration
+import eu.nebulouscloud.exn.modules.sal.processors.AbstractProcessor
+import eu.nebulouscloud.exn.modules.sal.repository.GatewayRepository
+import eu.nebulouscloud.exn.modules.sal.repository.cloud.CloudRepository
+import eu.nebulouscloud.exn.modules.sal.repository.job.JobRepository
+import eu.nebulouscloud.exn.modules.sal.repository.job.deleteStrategies.IJobDeleteStrategy
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.stereotype.Service
+
+@Service
+class JobProcessor extends AbstractProcessor{
+
+ @Autowired
+ JobRepository jobRepository
+
+ @Autowired
+ GatewayRepository gatewayRepository
+
+ @Autowired
+ SalConfiguration salConfiguration
+
+ @Autowired
+ Map deleteStrategies
+
+ @Override
+ Map post(Map metaData, String o){
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Creating job {}',metaData.user, o)
+
+// User Credentials for connecting to ProActive Server.
+// SAL is a REST interface to PWS. Get it from UI or store in middleware db?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+// Deserialization should happen from calling component e.g. UI and not the proxying one
+// We just proxy the json payload, which has already been serialized by the calling component
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+ headers.setContentType(MediaType.APPLICATION_JSON)
+
+ def response = jobRepository.save(o,headers,Object.class)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+ @Override
+ Map get(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Getting clouds {}',metaData.user, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+
+ //Check jobId mentioned above
+ String jobId = metaData.jobId
+ def response
+ if(!jobId){
+ response = jobRepository.getAll(headers, List.class)
+ }else{
+ response= jobRepository.getById(jobId, headers)
+ }
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+ @Override
+ Map delete(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ String jobId = metaData.jobId
+ String action = metaData.action
+
+ logger.info('{} - [{}] job {} and payload {}',metaData.user, action, jobId, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+ headers.setContentType(MediaType.APPLICATION_JSON)
+
+ IJobDeleteStrategy deleteStrategy = deleteStrategies.get('job'+action.capitalize()+'Strategy')
+
+ if(!deleteStrategy){
+ return [
+ "status": HttpStatus.NOT_IMPLEMENTED.value(),
+ "body": ["key":"action-not-support","message":"Delete type "+ action +" is not supported"]
+ ]
+ }
+
+
+ //Check jobId mentioned above
+ def response = deleteStrategy.handleDelete(jobId, o, headers)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": ["success":response]
+ ]
+
+ }
+
+ //submit job
+ @Override
+ Map update(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Submitting job {} with body {}',metaData.user, metaData.jobId, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+ headers.setContentType(MediaType.APPLICATION_JSON)
+
+ //Check jobId mentioned above
+ Object response = jobRepository.save((metaData.jobId as String)+'/submit',o,headers, Object.class)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NoOpProcessor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NoOpProcessor.groovy
new file mode 100644
index 0000000..da0dc9d
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NoOpProcessor.groovy
@@ -0,0 +1,14 @@
+package eu.nebulouscloud.exn.modules.sal.processors.impl
+
+import eu.nebulouscloud.exn.modules.sal.processors.AbstractProcessor
+import org.springframework.stereotype.Service
+
+/**
+ * If no license is here then you can whatever you like!
+ * and of course I am not liable
+ *
+ * Created by fotis on 21/02/20.
+ */
+@Service
+class NoOpProcessor extends AbstractProcessor{
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NodeCandidateProcessor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NodeCandidateProcessor.groovy
new file mode 100644
index 0000000..51d5c4a
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NodeCandidateProcessor.groovy
@@ -0,0 +1,54 @@
+package eu.nebulouscloud.exn.modules.sal.processors.impl
+
+
+import eu.nebulouscloud.exn.modules.sal.processors.AbstractProcessor
+import eu.nebulouscloud.exn.modules.sal.repository.GatewayRepository
+import eu.nebulouscloud.exn.modules.sal.repository.node.NodeRegistrar
+import eu.nebulouscloud.exn.modules.sal.repository.nodecandidate.NodeCandidateRepository
+import eu.nebulouscloud.exn.modules.sal.configuration.SalConfiguration
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.stereotype.Service
+
+@Service('nodecandidateProcessor')
+class NodeCandidateProcessor extends AbstractProcessor{
+
+ @Autowired
+ NodeCandidateRepository nodeCandidateRepository
+
+ @Autowired
+ GatewayRepository gatewayRepository
+
+ @Autowired
+ SalConfiguration salConfiguration
+
+ @Autowired
+ Map nodeRegistrarMap
+
+ @Override
+ Map get(Map metaData, String o) {
+
+ logger.info('{} - Getting node candidates {}',metaData.user, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+ headers.setContentType(MediaType.APPLICATION_JSON)
+
+ //Check jobId mentioned above
+ List response = nodeCandidateRepository.findCandidates(o,headers,List.class)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NodeProcessor.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NodeProcessor.groovy
new file mode 100644
index 0000000..2b9f006
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/processors/impl/NodeProcessor.groovy
@@ -0,0 +1,172 @@
+package eu.nebulouscloud.exn.modules.sal.processors.impl
+
+
+import eu.nebulouscloud.exn.modules.sal.processors.AbstractProcessor
+import eu.nebulouscloud.exn.modules.sal.repository.GatewayRepository
+import eu.nebulouscloud.exn.modules.sal.repository.node.NodeRegistrar
+import eu.nebulouscloud.exn.modules.sal.configuration.SalConfiguration
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.http.HttpStatus
+import org.springframework.stereotype.Component
+
+@Component
+class NodeProcessor extends AbstractProcessor{
+
+ @Autowired
+ GatewayRepository gatewayRepository
+
+ @Autowired
+ SalConfiguration salConfiguration
+
+ @Autowired
+ Map nodeRegistrarMap
+
+ @Override
+ Map post(Map metaData, String o){
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Registering node {}',metaData.user, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store in middleware db?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ String nodeType = metaData.type
+ NodeRegistrar nodeRegistrarRepository = nodeRegistrarMap.get(nodeType+'NodeRepository')
+
+ if(!nodeRegistrarRepository){
+ return [
+ "status": HttpStatus.NOT_IMPLEMENTED.value(),
+ "body": ["key":"type-not-support","message":"Node type "+ nodeType +"is not supported"]
+ ]
+ }
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+
+ def response = nodeRegistrarRepository.register(metaData.jobId as String, o, headers)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": ["success": response == 0]
+ ]
+
+ }
+
+ @Override
+ Map get(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Getting node for Job {}',metaData.user, metaData.jobId)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ String nodeType = metaData.type
+
+ NodeRegistrar nodeRegistrarRepository = nodeRegistrarMap.get(nodeType+'NodeRepository')
+
+ if(!nodeRegistrarRepository){
+ return [
+ "status": HttpStatus.NOT_IMPLEMENTED.value(),
+ "body": ["key":"type-not-support","message":"Node type "+ nodeType +"is not supported"]
+ ]
+ }
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+
+ Object response = nodeRegistrarRepository.getById(metaData.jobId as String, headers)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+ @Override
+ Map delete(Map metaData, String o) {
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Deleting nodes for Job {}',metaData.user, metaData.jobId)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store behind the scenes ?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ String nodeType = metaData.type
+
+ NodeRegistrar nodeRegistrarRepository = nodeRegistrarMap.get(nodeType+'NodeRepository')
+
+ if(!nodeRegistrarRepository){
+ return [
+ "status": HttpStatus.NOT_IMPLEMENTED.value(),
+ "body": ["key":"type-not-support","message":"Node type "+ nodeType +"is not supported"]
+ ]
+ }
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+
+ Object response = nodeRegistrarRepository.deleteById(metaData.jobId as String, headers)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": response
+ ]
+
+ }
+
+ @Override
+ Map update(Map metaData, String o){
+
+ def ret =[
+ "status": HttpStatus.OK.value(),
+ "body": {}
+ ]
+
+ logger.info('{} - Assigning node {} to job with payload: {}',metaData.user, metaData.jobId, o)
+
+ //User Credentials for connecting to ProActive Server.
+ //SAL is a REST interface to PWS. Get it from UI or store in middleware db?
+ String sessionId = gatewayRepository.login(salConfiguration.username,salConfiguration.password)
+
+ String nodeType = metaData.type
+ NodeRegistrar nodeRegistrarRepository = nodeRegistrarMap.get(nodeType+'NodeRepository')
+
+ if(!nodeRegistrarRepository){
+ return [
+ "status": HttpStatus.NOT_IMPLEMENTED.value(),
+ "body": ["key":"type-not-support","message":"Node type "+ nodeType +"is not supported"]
+ ]
+ }
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.add('sessionid',sessionId)
+
+ def response = nodeRegistrarRepository.assign(metaData.jobId as String, o, headers)
+
+ return [
+ "status": HttpStatus.OK.value(),
+ "body": ["success": response == 0]
+ ]
+
+ }
+
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/AbstractSalRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/AbstractSalRepository.groovy
new file mode 100644
index 0000000..b853156
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/AbstractSalRepository.groovy
@@ -0,0 +1,146 @@
+package eu.nebulouscloud.exn.modules.sal.repository
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import eu.nebulouscloud.exn.modules.sal.configuration.SalConfiguration
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpEntity
+import org.springframework.http.HttpHeaders
+import org.springframework.http.HttpMethod
+import org.springframework.http.RequestEntity
+import org.springframework.web.client.HttpStatusCodeException
+import org.springframework.web.client.RestTemplate
+
+abstract class AbstractSalRepository{
+
+ protected final String resource
+
+ AbstractSalRepository(String resource){
+ this.resource = resource
+ }
+
+ @Autowired
+ RestTemplate restTemplate
+
+ @Autowired
+ ObjectMapper mapper
+
+ @Autowired
+ SalConfiguration configuration
+
+ //POST
+ //For session token
+ protected String post(String url, Map body, HttpHeaders headers) throws HttpStatusCodeException{
+
+ HttpEntity entity = new HttpEntity(body, headers)
+
+ return restTemplate.postForEntity(baseUrl+'/'+resource+(url?'/'+url:''), entity, String.class).getBody()
+
+ }
+
+ //Not tested -> Created FOR NODES and JOBS that we dont know the payload
+ protected T post(String url, String body, HttpHeaders headers) throws HttpStatusCodeException{
+
+ post(url, body, headers, Object.class)
+
+ }
+
+ protected Map post(String body, HttpHeaders headers) throws HttpStatusCodeException{
+
+ post(null,body,headers,Map.class)
+
+ }
+
+ protected T post(String body, HttpHeaders headers, Class responseType) throws HttpStatusCodeException{
+
+ return post(null,body,headers,responseType)
+
+ }
+
+ protected T post(String url, String body, HttpHeaders headers, Class responseType) throws HttpStatusCodeException{
+
+ HttpEntity entity = new HttpEntity(body, headers)
+
+ return restTemplate.postForEntity(baseUrl+'/'+resource+(url?'/'+url:''), entity, responseType).getBody() as T
+
+ }
+
+ //Delete
+ protected def delete(String url, HttpHeaders headers){
+ delete(url, null,headers, Object.class)
+ }
+
+ protected def delete(String url, String body, HttpHeaders headers, Class responseType) throws HttpStatusCodeException{
+
+ RequestEntity entity = new RequestEntity(body,headers,HttpMethod.DELETE,new URI(baseUrl+'/'+resource+(url? '/'+url:'')))
+
+ return restTemplate.exchange(entity, responseType).getBody()
+
+ }
+
+ //PUT
+ protected Object put(String url, String body, HttpHeaders headers) throws HttpStatusCodeException{
+
+ RequestEntity entity = new RequestEntity(body, headers, HttpMethod.PUT, new URI(baseUrl+'/'+resource+(url? '/'+url:'')))
+
+ return restTemplate.exchange(entity, Object.class).getBody()
+
+ }
+
+ //GET
+
+ protected T get(HttpHeaders headers, Class responseType) throws HttpStatusCodeException{
+ get(null, headers, responseType)
+ }
+
+ protected T get(String url, HttpHeaders headers, Class responseType) throws HttpStatusCodeException{
+
+ RequestEntity entity = new RequestEntity(headers, HttpMethod.GET, new URI(baseUrl+'/'+resource+(url? '/'+url:'')))
+
+ return restTemplate.exchange(entity, responseType).getBody() as T
+
+ }
+
+ def getById(String id, HttpHeaders headers){
+ return get(id, headers, Map.class)
+ }
+
+
+ def getAll(HttpHeaders headers){
+ return getAll(headers,Map.class)
+ }
+
+ def getAll(HttpHeaders headers, Class responseType){
+ return get(headers,responseType)
+ }
+
+ def save(String body, HttpHeaders headers){
+ return save(body, headers, Map.class)
+ }
+
+ def save(String url, String body, HttpHeaders headers){
+ return post(url, body,headers, Map.class)
+ }
+
+ def save(String body, HttpHeaders headers, Class responseType){
+ return post(null,body, headers, responseType)
+ }
+
+ def save(String url, String body, HttpHeaders headers, Class responseType){
+ return post(url, body, headers, responseType)
+ }
+
+ def update(String url, String body, HttpHeaders headers){
+ return put(url, body, headers)
+ }
+
+ String getBaseUrl(){
+ return "${configuration.protocol}://${configuration.host}:${configuration.port}/${configuration.api}"
+// return "${configuration.protocol}://${configuration.host}/${configuration.api}"
+ }
+
+ def deleteByIds(String url, String body, HttpHeaders headers, Class responseType){
+ return delete(url,body,headers,responseType)
+ }
+
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/GatewayRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/GatewayRepository.groovy
new file mode 100644
index 0000000..dbb2fd3
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/GatewayRepository.groovy
@@ -0,0 +1,31 @@
+package eu.nebulouscloud.exn.modules.sal.repository
+
+import org.springframework.http.HttpHeaders
+import org.springframework.http.MediaType
+import org.springframework.stereotype.Repository
+import org.springframework.util.LinkedMultiValueMap
+import org.springframework.util.MultiValueMap
+import org.springframework.web.client.HttpClientErrorException
+
+@Repository
+class GatewayRepository extends AbstractSalRepository{
+
+ GatewayRepository() {
+ super('pagateway')
+ }
+
+ String login(String username, String password) throws HttpClientErrorException.Unauthorized{
+
+ MultiValueMap credentials = new LinkedMultiValueMap()
+
+ credentials.add('username',username)
+ credentials.add('password',password)
+
+ HttpHeaders headers = new HttpHeaders()
+ headers.setContentType(MediaType.MULTIPART_FORM_DATA)
+ String sessionId = post('connect', credentials, headers)
+
+ return sessionId
+
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/cloud/CloudRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/cloud/CloudRepository.groovy
new file mode 100644
index 0000000..8c4135d
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/cloud/CloudRepository.groovy
@@ -0,0 +1,14 @@
+package eu.nebulouscloud.exn.modules.sal.repository.cloud
+
+import eu.nebulouscloud.exn.modules.sal.repository.AbstractSalRepository
+import org.springframework.stereotype.Repository
+
+@Repository
+class CloudRepository extends AbstractSalRepository{
+
+ CloudRepository() {
+ super('clouds')
+ }
+
+
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/JobRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/JobRepository.groovy
new file mode 100644
index 0000000..f3bb3f4
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/JobRepository.groovy
@@ -0,0 +1,12 @@
+package eu.nebulouscloud.exn.modules.sal.repository.job
+
+import eu.nebulouscloud.exn.modules.sal.repository.AbstractSalRepository
+import org.springframework.stereotype.Repository
+
+@Repository
+class JobRepository extends AbstractSalRepository{
+
+ JobRepository() {
+ super('jobs')
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/IJobDeleteStrategy.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/IJobDeleteStrategy.groovy
new file mode 100644
index 0000000..50c68b8
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/IJobDeleteStrategy.groovy
@@ -0,0 +1,8 @@
+package eu.nebulouscloud.exn.modules.sal.repository.job.deleteStrategies
+
+import org.springframework.http.HttpHeaders
+
+interface IJobDeleteStrategy {
+
+ def handleDelete(String jobId, String body, HttpHeaders headers)
+}
\ No newline at end of file
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobDeleteStrategy.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobDeleteStrategy.groovy
new file mode 100644
index 0000000..df36b11
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobDeleteStrategy.groovy
@@ -0,0 +1,23 @@
+package eu.nebulouscloud.exn.modules.sal.repository.job.deleteStrategies
+
+import eu.nebulouscloud.exn.modules.sal.repository.job.JobRepository
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.stereotype.Component
+
+@Component
+class JobDeleteStrategy implements IJobDeleteStrategy{
+
+ @Autowired
+ JobRepository jobRepository
+
+ @Override
+ def handleDelete(String jobId, String body, HttpHeaders headers) {
+
+ if(jobId){
+ return jobRepository.update('remove/'+jobId,body,headers)
+ }
+
+ return jobRepository.update('remove',body,headers)
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobKillStrategy.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobKillStrategy.groovy
new file mode 100644
index 0000000..4130bf6
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobKillStrategy.groovy
@@ -0,0 +1,26 @@
+package eu.nebulouscloud.exn.modules.sal.repository.job.deleteStrategies
+
+import eu.nebulouscloud.exn.modules.sal.repository.job.JobRepository
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.stereotype.Component
+
+@Component
+class JobKillStrategy implements IJobDeleteStrategy{
+
+ @Autowired
+ JobRepository jobRepository
+
+ @Override
+ def handleDelete(String jobId, String body, HttpHeaders headers) {
+
+ //Kill all
+ if(!jobId){
+ return jobRepository.update('kill',body,headers)
+ }
+
+ //Kill by id
+ return jobRepository.update(jobId+'/kill',body,headers)
+
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobStopStrategy.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobStopStrategy.groovy
new file mode 100644
index 0000000..2563ead
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/job/deleteStrategies/JobStopStrategy.groovy
@@ -0,0 +1,24 @@
+package eu.nebulouscloud.exn.modules.sal.repository.job.deleteStrategies
+
+import eu.nebulouscloud.exn.modules.sal.repository.job.JobRepository
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpHeaders
+import org.springframework.stereotype.Component
+
+@Component
+class JobStopStrategy implements IJobDeleteStrategy{
+
+ @Autowired
+ JobRepository jobRepository
+
+ @Override
+ def handleDelete(String jobId, String body, HttpHeaders headers) {
+
+ if(!jobId){
+ return
+ }
+
+ return jobRepository.update(jobId+'/stop',body,headers)
+
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/AbstractNodeRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/AbstractNodeRepository.groovy
new file mode 100644
index 0000000..27a6022
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/AbstractNodeRepository.groovy
@@ -0,0 +1,32 @@
+package eu.nebulouscloud.exn.modules.sal.repository.node
+
+
+import eu.nebulouscloud.exn.modules.sal.repository.AbstractSalRepository
+import org.springframework.http.HttpHeaders
+
+abstract class AbstractNodeRepository extends AbstractSalRepository implements NodeRegistrar {
+
+ AbstractNodeRepository(String resource) {
+ super(resource)
+ }
+
+ @Override
+ def register(String jobId, String body, HttpHeaders headers){
+ post(jobId, body, headers)
+ }
+
+ @Override
+ def assign(String jobId, String body, HttpHeaders headers){
+ put(jobId, body, headers)
+ }
+
+ @Override
+ def deleteById(String jobId, HttpHeaders headers){
+ //Payload not clear enough if this work for other type of nodes, if not override this in the derived class
+ if(jobId) {
+ return delete('remove/job/' + jobId, headers)
+ }
+
+ return delete('remove',headers)
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/ByonNodeRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/ByonNodeRepository.groovy
new file mode 100644
index 0000000..0928f30
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/ByonNodeRepository.groovy
@@ -0,0 +1,11 @@
+package eu.nebulouscloud.exn.modules.sal.repository.node
+
+import org.springframework.stereotype.Repository
+
+@Repository
+class ByonNodeRepository extends AbstractNodeRepository{
+
+ ByonNodeRepository() {
+ super('byon')
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/CloudNodeRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/CloudNodeRepository.groovy
new file mode 100644
index 0000000..3e671ee
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/CloudNodeRepository.groovy
@@ -0,0 +1,20 @@
+package eu.nebulouscloud.exn.modules.sal.repository.node
+
+import org.springframework.http.HttpHeaders
+import org.springframework.stereotype.Repository
+
+//Not sure but probably this is the cloud only [before byon and edge was supported?],
+//that needs to be provided with a candidateId fetched through nodecandidates repository
+//Ask Michael
+@Repository
+class CloudNodeRepository extends AbstractNodeRepository{
+
+ CloudNodeRepository() {
+ super('nodes')
+ }
+
+ @Override
+ def assign(String jobId, String body, HttpHeaders headers){
+ post(jobId, body, headers)
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/EdgeNodeRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/EdgeNodeRepository.groovy
new file mode 100644
index 0000000..77f914b
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/EdgeNodeRepository.groovy
@@ -0,0 +1,11 @@
+package eu.nebulouscloud.exn.modules.sal.repository.node
+
+import org.springframework.stereotype.Repository
+
+@Repository
+class EdgeNodeRepository extends AbstractNodeRepository{
+
+ EdgeNodeRepository() {
+ super('edge')
+ }
+}
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/NodeRegistrar.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/NodeRegistrar.groovy
new file mode 100644
index 0000000..ebc04ea
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/node/NodeRegistrar.groovy
@@ -0,0 +1,13 @@
+package eu.nebulouscloud.exn.modules.sal.repository.node
+
+import org.springframework.http.HttpHeaders
+
+interface NodeRegistrar {
+
+ def register(String jobId, String body, HttpHeaders headers)
+ def assign(String jobId, String body, HttpHeaders headers)
+ def getAll(HttpHeaders headers)
+ def getById(String jobId, HttpHeaders headers)
+ def deleteById(String jobId, HttpHeaders headers)
+
+}
\ No newline at end of file
diff --git a/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/nodecandidate/NodeCandidateRepository.groovy b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/nodecandidate/NodeCandidateRepository.groovy
new file mode 100644
index 0000000..a689b6f
--- /dev/null
+++ b/exn-middleware-core/src/main/groovy/eu/nebulouscloud/exn/modules/sal/repository/nodecandidate/NodeCandidateRepository.groovy
@@ -0,0 +1,19 @@
+package eu.nebulouscloud.exn.modules.sal.repository.nodecandidate
+
+import eu.nebulouscloud.exn.modules.sal.repository.AbstractSalRepository
+import org.springframework.http.HttpHeaders
+import org.springframework.stereotype.Repository
+
+@Repository
+class NodeCandidateRepository extends AbstractSalRepository{
+
+ NodeCandidateRepository() {
+ super('nodecandidates')
+ }
+
+ List findCandidates(String body, HttpHeaders headers, Class responseType){
+ post('filter',body,headers,responseType)
+ }
+
+
+}
diff --git a/java-spring-boot-demo/.gitignore b/java-spring-boot-demo/.gitignore
deleted file mode 100644
index 549e00a..0000000
--- a/java-spring-boot-demo/.gitignore
+++ /dev/null
@@ -1,33 +0,0 @@
-HELP.md
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
diff --git a/java-spring-boot-demo/Dockerfile b/java-spring-boot-demo/Dockerfile
deleted file mode 100644
index 427e30e..0000000
--- a/java-spring-boot-demo/Dockerfile
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Build stage
-#
-FROM docker.io/library/maven:3.9.2-eclipse-temurin-17 AS build
-COPY src /home/app/src
-COPY pom.xml /home/app
-RUN mvn -f /home/app/pom.xml clean package
-
-#
-# Package stage
-#
-FROM docker.io/library/eclipse-temurin:17-jre
-COPY --from=build /home/app/target/demo-0.0.1-SNAPSHOT.jar /usr/local/lib/demo.jar
-EXPOSE 8080
-ENTRYPOINT ["java","-jar","/usr/local/lib/demo.jar"]
diff --git a/java-spring-boot-demo/pom.xml b/java-spring-boot-demo/pom.xml
deleted file mode 100644
index 76e0f0e..0000000
--- a/java-spring-boot-demo/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
- 4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 3.1.0
-
-
- com.example
- demo
- 0.0.1-SNAPSHOT
- demo
- Demo project for Spring Boot
-
- 17
-
-
-
- org.springframework.boot
- spring-boot-starter
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
diff --git a/java-spring-boot-demo/src/main/java/com/example/demo/DemoApplication.java b/java-spring-boot-demo/src/main/java/com/example/demo/DemoApplication.java
deleted file mode 100644
index 094d95b..0000000
--- a/java-spring-boot-demo/src/main/java/com/example/demo/DemoApplication.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example.demo;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class DemoApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(DemoApplication.class, args);
- }
-
-}
diff --git a/java-spring-boot-demo/src/main/java/com/example/demo/DemoController.java b/java-spring-boot-demo/src/main/java/com/example/demo/DemoController.java
deleted file mode 100644
index 61a5075..0000000
--- a/java-spring-boot-demo/src/main/java/com/example/demo/DemoController.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.example.demo;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-public class DemoController {
-
- @RequestMapping("/")
- public Object root() {
- return null;
- }
-
-}
diff --git a/java-spring-boot-demo/src/test/java/com/example/demo/DemoApplicationTests.java b/java-spring-boot-demo/src/test/java/com/example/demo/DemoApplicationTests.java
deleted file mode 100644
index eaa9969..0000000
--- a/java-spring-boot-demo/src/test/java/com/example/demo/DemoApplicationTests.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.example.demo;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class DemoApplicationTests {
-
- @Test
- void contextLoads() {
- }
-
-}
diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml
index 5490ad3..aa46e0b 100644
--- a/zuul.d/jobs.yaml
+++ b/zuul.d/jobs.yaml
@@ -8,15 +8,15 @@
- nebulous-exn-middleware-container-images
description: Build the container images.
files: &image_files
- - ^java-spring-boot-demo/
+ - ^exn-middleware-core
vars: &image_vars
promote_container_image_job: nebulous-exn-middleware-upload-container-images
container_images:
- - context: java-spring-boot-demo
+ - context: exn-middleware-core
registry: quay.io
- repository: quay.io/nebulous/exn-middleware-java-spring-boot-demo
+ repository: quay.io/nebulous/exn-middleware-exn-middleware-core
namespace: nebulous
- repo_shortname: exn-middleware-java-spring-boot-demo
+ repo_shortname: exn-middleware-exn-middleware-core
repo_description: ""
- job:
@@ -44,7 +44,7 @@
description: Run Hadolint on Dockerfile(s).
vars:
dockerfiles:
- - java-spring-boot-demo/Dockerfile
+ - exn-middleware-core/Dockerfile
- job:
name: nebulous-exn-middleware-helm-lint