Upload of new Software
SoftwareUploadWizard (SUW) widget allows a VO admin to create a new Service resource through a step-by-step wizard.
Software Upload Wizard
SUW allows to easily create new gCube software resources by registering them on the infrastructure, making them immediately available for deployment on a GHN.
SUW application can be reached by accessing Resources Management Portlet, which in time can be usually reached by accessing a VO area in the portal. Once Resources Management Portlet is open, SUW can be started by selecting the Software category and the click on the "Upload software" button on the menu panel on top of the main window of RMP.
Only users that own VO-Admin rights can start Software Upload Wizard.
Managed Software Types
SUW currently manages 6 defined software types and 1 special use case.
In most cases the user has to provide:
- List of maven dependencies: groupId, artifactId and artifact version
- Data for deliverables generation
- Maintainers list: First and Last name, email, organization
- List of software changes: ticket number and modification description
- Software usage notes: installation notes, configuration notes, descriptive list of software dependencies , uninstallation notes
- License
Web Application
A java application utilizing web browser technologies to accomplish one or more tasks over a network, through a web browser.
Third party applications are supported.
Wizard input:
- If working under production scope: Third Party software [isThirdParty].
- Service data: Service Name [serviceName], Description [serviceDescription], Version (Proposed: 1.0.0) [serviceVersion].
- Web app package data: WebApp Package Name [packageName], Description [packageDescription], Version [packageVersion], entrypoints [entrypointList].
- Web app package files:
- WebApp archive (war): mandatory, only one allowed
- Install script (sh): optional, more than one allowed
- Uninstall script (sh): optional, more than one allowed
- Misc file (sh): optional, more than one allowed
Wizard output:
- Provided war archive registered on a maven repository as primary artifact.
- Newly generated Service Archive registered on a maven repository as an artifact with classifier servicearchive.
- Newly createad Service Profile registered on the IS.
Library
A collection of reusable java software packages.
Third party libraries are supported.
Wizard input:
- If working under production scope: Third party software [isThirdParty].
- Service data: Service Name [serviceName], Service Description [serviceDescription], Service Version [serviceVersion - default 1.0.0].
- If not third party software user enters Service Class [serviceClass].
- Package data: package description [packageName], package description [packageDescription], package version [packageVersion].
- Package files:
- Java library (jar): mandatory, more than one allowed
- Install script (sh): optional, more than one allowed
- Uninstall script (sh): optional, more than one allowed
- Misc file (sh): optional, more than one allowed
Wizard output:
- Jar archive registered on a maven repository as a primary artifact.
- If multiple jars are provided by the user, these are repackaged into a single archive.
- Newly generated Service Archive, containing all the provided jars, registered on a maven repository with classifier servicearchive.
- Newly createad Service Profile registered on the IS.
AnySoftware
Generic software that can run on the infrastructure.
Important: This wizard is available only on production environment
Wizard input:
- Software data: software name, description, version
- User provided files:
- A tarball (tar.gz) containing executables: mandatory, only one allowed
- Install script (sh): mandatory, more than one allowed
- Uninstall script (sh): mandatory, more than one allowed
- Reboot script (sh): optional, more than one allowed
Wizard output:
- A Software archive with a single package containing all user provided files and generated files is registered on a gcube-externals maven repository with classifier servicearchive.
- Newly created Service Profile registered on the IS.
gCube Patch
One or more bug fixes for a gCube component.
Wizard input:
- User provided Patch archive (tar.gz): must include in the root directory a file named apply.sh and must not include on the root directory files names as the generated deliverables (README, INSTALL, etc.).
Wizard output:
- A new tar.gz archive is generated including all the files provided with the user uploaded Patch archive, the generated deliverables (Service profile,README, INSTALL, etc.) and the service profile.
- The generated tar.gz is uploaded on a maven repository with classifier servicearchive.
gCube Plugin
A gCube Plugin is a a set of software components that extends the functionalities of a gCube component.
Wizard input:
- Software data: Software Name [softwareName], Description [softwareDescription], Version [softwareVersion], Service class [serviceClass]
- Patch Target Service data: Service class [targetServiceClass], Service Name [targetServiceName], Service Version [targetServiceVersion], Package Name [targetPackageName], Package Version [targetPackageVersion].
- Plugin files:
- Jar Archive (jar): mandatory, only one allowed
- Install script (sh): optional, more than one allowed
- Uninstall script (sh): optional, more than one allowed
- Reboot script (sh): optional, more than one allowed
- Misc file (sh): optional, more than one allowed
Wizard output
- The user-uploaded jar archive is registered on the maven target repository as a primary artifact
- A Software archive with a single package containing all user provided files and generated files is registered on the maven target repository with classifier servicearchive
- Newly created Service Profile is registered on the IS
gCube WebService
A Web Service of the GCube Infrastructure. In this wizard the user will provide packages for the Main package (gar file) and Stub package (jar library).
Wizard input:
- Service data: Service name, description, version, service class
- Main Package data (GAR package): name, description, version, PortTypes
- Main Package files:
- WebService archive (GAR): mandatory, only one instance allowed
- Install script (sh): optional, only one instance allowed
- Uninstall script (sh): optional, only one instance allowed
- Reboot script (sh): optional, only one instance allowed
- Misc file: optional, multiple instances allowed, allows any file extension.
- Maven coordinates of the service artifact
- Stubs package data: name, description, version
- Stubs package files:
- Java library (jar): mandatory, only one instance allowed
- Stubs maven artifact coordinates
Wizard output:
- The stub package is registered as a maven artifact on the target maven repository.
- MainPackage's GAR archive is uploaded on a maven repository as a primary artifact.
- A Software archive with multiple packages containing all user provided files and generated files is uploaded on the target maven repository with classifier servicearchive.
- Generated Service Profile is registered on the IS.
Software Registration
This Wizard allows the user to register on the Software Gateway any software that is currently uploaded on any infrastructure available Maven repository by providing the maven coordinates of the artifact.
Wizard input:
- Maven artifact coordinates.
Wizard output:
- Newly createad Service Profile registered on the IS.
Deliverables creation rules
The registration process usually involves the upload of maven artifacts on one of the gCube maven repositories and the registration of a Service Profile on the IS. Software resources are usually registered and made available under the same VO scope (and included VREs) where the user is working on. The maven repository where the artifacts are stored depends usually depends on two factors:
- Whether the software has been marked by the user as third party
- The scope infrastructure where the user is working. If the scope is related to a production environment the target repository is gcube-releases, otherwise is gcube-snapshots.
In the following chapters are listed the rules that are applied for each managed software type on the topics of:
- Service profile creation
- Target maven repository selection
- Maven pom.xml generation
Web Application
Service Profile
if ( [isThirdParty] ) Service->Name:[serviceName] Service->Description:[serviceDescription] Service->Version: [serviceVersion] Service->Class: WebApp WebApp package Package->Name: [packageName] Package->Description: [packageDescription] Package->Version: [packageVersion] Package->Type: webapplication Package->Requirement: Target platform: Tomcat 6.0 Package->Requirement: GHN Requirement: Java1.6 if ( ![isThirdParty] && scope infrastructure == "\d4science.research-infrastructures.eu") Service->Name:[serviceName] Service->Description:[serviceDescription] Service->Version: 1.0.0 Service->Class: WebApp WebApp package Package->Name: [packageName] Package->Description: [packageDescription] Package->Version: [packageVersion] Package->Type: webapplication Package->Requirement: Target platform: Tomcat 6.0 Package->Requirement: GHN Requirement: Java1.6 if ( ![isThirdParty] && scope infrastructure == "\gcube") Service->Name:[serviceName] Service->Description:[serviceDescription] Service->Version: 1.0.0 Service->Class: WebApp WebApp package Package->Name: [packageName] Package->Description: [packageDescription] Package->Version: [packageVersion]-SNAPSHOT Package->Type: webapplication Package->Requirement: Target platform: Tomcat 6.0 Package->Requirement: GHN Requirement: Java1.6
Target maven repository
if ([isThirdParty]) ''gcube-externals'' if (![isThirdParty] && [workingScopeInfrastructure] == "\d4science.research-infrastructures.eu") ''gcube-releases'' if (![isThirdParty] && [workingScopeInfrastructure] == "\gcube") ''gcube-snapshots''
pom.xml
if ([isThirdParty]) artifactId: [packageName] groupId: org.gcube.externals version: [packageVersion] if (![isThirdParty] && [workingScopeInfrastructure] == "\d4science.research-infrastructures.eu") artifactId: [packageName] groupId: org.gcube.webapps version: [packageVersion] if (![isThirdParty] && [workingScopeInfrastructure] == "\gcube") artifactId: [packageName] groupId: org.gcube.webapps version: [packageVersion]-SNAPSHOT
Library
Service Profile
if ([isThirdParty]) Service->Name = [ serviceName ] Service->Description = [ serviceDescription ] Service->Version = [ serviceVersion ] Service->Class = External One and only Software Package Package->Name = [packageName] Package->Description = [packageDescription] Package->Version = [packageVersion] Package->Type = library if (![isThirdParty] && [workingScopeInfrastructure] == "\d4science.research-infrastructures.eu") Service->Name = [ serviceName ] Service->Description = [ serviceDescription ] Service->Version = [ serviceVersion ] Service->Class = [ serviceClass ] One and only Software Package Package->Name = [ packageName ] Package->Description = [ packageDescription ] Package->Version = [ packageVersion ] Package->Type = library if (![isThirdParty] && [workingScopeInfrastructure] == "\gcube") Service->Name = [ serviceName ] Service->Description = [ serviceDescription ] Service->Version = [ serviceVersion ] Service->Class = [ serviceClass ] One and only Software Package Package->Name = [ packageName ] Package->Description = [ packageDescription ] Package->Version = [ packageVersion ]-SNAPSHOT Package->Type = library
Target maven repository
if ( [isThirdParty] ) ''gcube-externals'' if ( ![isThirdParty] && [workingScopeInfrastructure] == "\d4science.research-infrastructures.eu") ''gcube-releases'' if ( ![isThirdParty] && [workingScopeInfrastructure] == "\gcube") ''gcube-snapshots''
pom.xml
If ([isThirdParty]) artifactId: [packageName] groupId: org.gcube.externals version: [packageVersion] if (![isThirdParty] && [workingScopeInfrastructure] == "\d4science.research-infrastructures.eu") artifactId: [packageName] groupId: org.gcube.[serviceClass] version: [packageVersion] if (![isThirdParty] && [workingScopeInfrastructure] == "\gcube") artifactId: [packageName] groupId: org.gcube.[serviceClass] version: [packageVersion]-SNAPSHOT
AnySoftware
Service Profile
Service->Name = [ softwareName ] Service->Description = [ softwareDescription ] Service->Version = "1.0.0" Service->Class = External One Software Package Package->Name = [softwareName] Package->Description = [softwareDescription] Package->Version = [softwareVersion] Package->Type = "application"
Target maven repository
gcube-externals
pom.xml
artifactId: [ softwareName ] groupId: org.gcube.External version: [ softwareVersion ]
gCube Patch
Service Profile
Service->Name = [ softwareName ] Service->Description = [ softwareDescription ] Service->Version = "1.0.0" Service->Class = Patches One and only Software Package Package->Name = [softwareName] Package->Description = [softwareDescription] Package->Version = [softwareVersion] Package->Type = "Application"
pom.xml
if (scope infrastructure == "/gcube") artifactId: [ softwareName ] groupId: org.gcube.patches version: [ softwareVersion ]-SNAPSHOT if (scope infrastructure == "/d4science.research-infrastructures.eu" ) artifactId: [ softwareName ] groupId: org.gcube.patches version: [ softwareVersion ]
gCube Plugin
Service Profile
Service->Name = [ softwareName ] Service->Description = [ softwareDescription ] Service->Version = 1.0.0 Service->Class = [serviceClass] if (scope infrastructure == "/gcube") A "Plugin" Package Package->Name = [softwareName] Package->Description = [softwareDescription] Package->Version = [softwareVersion]-SNAPSHOT Package->Type = Plugin Package->TargetService->Service->Class = [targetServiceClass] Package->TargetService->Service->Name = [targetServiceName] Package->TargetService->Service->Version = [targetServiceVersion] Package->TargetService->Name = [targetPackageName] Package->TargetService->Version = [targetPackageVersion] if (scope infrastructure == "/d4science.research-infrastructures.eu" ) A "Plugin" Package Package->Name = [softwareName] Package->Description = [softwareDescription] Package->Version = [softwareVersion] Package->Type = Plugin Package->TargetService->Service->Class = [targetServiceClass] Package->TargetService->Service->Name = [targetServiceName] Package->TargetService->Service->Version = [targetServiceVersion] Package->TargetService->Name = [targetPackageName] Package->TargetService->Version = [targetPackageVersion]
pom.xml
if (scope infrastructure == "/gcube") artifactId: [ softwareName ] groupId: org.gcube.[ serviceClass ] version: [ softwareVersion ]-SNAPSHOT if (scope infrastructure == "/d4science.research-infrastructures.eu" ) artifactId: [ softwareName ] groupId: org.gcube.[ serviceClass ] version: [ softwareVersion ]
gCube WebService
Service Profile
Service->Name = [ serviceName ] Service->Description = [ serviceDescription ] Service->Version = [ serviceVersion ] Service->Class = [ serviceClass ] One Main Package Main Package Package->Name = [mainPackageName] Package->Description = [mainPackageDescription] Package->Version = [mainPackageVersion] GarArchive: [Uploaded Gar Archive Filename] PortType: [portTypeName] //One or more Main Package Files Gar Archive One Stubs Package Software Package Package->Name = [stubsPackageName] Package->Description = [stubsPackageDescription] Package->Version = [stubsPackageVersion] Package->Type = library Software Package Files Jar archive: mandatory, more than one allowed Install script: optional, more than one allowed ??? Uninstall script: optional, more than one allowed ??? Misc file: optional, more than one allowed ??? Additional Packages Software Package Package->Name = [additionalPackageName] Package->Description = [additionalPackageDescription] Package->Version = [additionalPackageVersion] Package->Type = library
pom.xml
Main Package artifactId: [ mainPackageName.toLowerCase() ] groupId: org.gcube.[serviceClass] version: [ mainPackageVersion ] Stubs Package artifactId: [ stubsPackageName.toLowerCase() ] groupId: org.gcube.[serviceClass] version: [ stubsPackageVersion ] Additional Package artifactId: [ additionalPackageName.toLowerCase() ] groupId: org.gcube.[serviceClass] version: [ additionalPackageVersion ]
Software Registration
Service Profile
Service->Name: [artifactId] Service->Version: 1.0.0 Service->Class: ExternalSoftware Software Package Package->Name: [artifactId] Package->Version: [artifactVersion] Package->Type: Library If ([isSnapshot]==true) Package->Files: User given filename (must end with '.jar') else Package->Files: [artifact id]-[artifact version].jar
pom.xml
artifactId: [artifactId] groupId: [artifactGroupId] if ([isSnapshot]==true) Version: [artifactVersion]-SNAPSHOT else Version: [artifactVersion]