Deploying in Docker
Parasoft SOAtest and Virtualize as well as Data Repository can be deployed to Docker. Parasoft has published official Docker images to Docker Hub for your convenience. Full installation instructions are included in the readme with each image. Follow the links below for the image that best suites your needs:
- SOAVirt (standard installation, analogous to desktop application)
- SOAVirt Server (server installation, analogous to WAR file installation)
- Data Repository (remote, stand-alone data repository server)
Deploying in Kubernetes
To deploy the soavirt server in Kubernetes, follow the process outlined below.
Prerequisites
First, a Persistent Volume and a Persistent Volume claim are needed. Create a Persistent Volume that can be shared by multiple nodes. It should be provisioned with 300GB of space and must have the ReadWriteMany access mode. This space will be used for the workspace of the soavirt server and will store configuration settings as well as Virtual Assets.
The default Persistent Volume Claim name is 'soavirt-pvc' and can be customized by updating the yaml definition of the soavirt server. The example shown below is a configuration to set up an NFS Persistent Volume and Persistent Volume Claim. While the example uses NFS, this is not required; use whatever persistent volume type fits your needs.
Warning: For NFS, the exported directory must have the same UID and GID as the Parasoft user that runs the container. For example, execute the command chown 1000:1000 <shared_path>
.
Code Block |
---|
language | yml |
---|
title | soavirt-pv.yaml |
---|
|
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 300Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: <path>
server: <ip address>
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: soavirt-pvc
spec:
storageClassName: nfs
accessModes:
- ReadWriteMany
resources:
requests:
storage: 300Gi |
Use the yaml file to create a Persistent Volume and a Persistent Volume claim:
Code Block |
---|
|
kubectl create -f soavirt-pv.yaml |
SOAVirt setup
Create the service that can be used to access soavirt server in Kubernetes. The example shown below exposes it using a node port, which provides a stable endpoint for applications to access Virtual Assets.
Code Block |
---|
language | yml |
---|
title | soavirt-service.yaml |
---|
|
kind: Service
apiVersion: v1
metadata:
name: soavirt-service
spec:
selector:
tag: soavirt
type: NodePort
ports:
- name: http
protocol: TCP
port: 9080
targetPort: 9080
nodePort: 30080
- name: events
protocol: TCP
port: 9617
targetPort: 9617
nodePort: 30617
- name: statistics
protocol: TCP
port: 9618
targetPort: 9618
nodePort: 30618 |
Use the yaml file to create service that can be used to access soavirt server in Kubernetes:
Code Block |
---|
|
kubectl create -f soavirt-service.yaml |
Optional for Ingress users: To expose the service with Ingress, the following rule can be used with some modifications based on your Ingress setup. Be aware that Events and Statistics require TCP connections which may not be supported by all Ingress Controllers.
Code Block |
---|
language | yml |
---|
title | soavirt-ingress.yaml |
---|
|
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: soavirt-ingress
namespace: soavirt-server
spec:
rules:
- host: soavirt.company.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: soavirt-service
port:
number: 9080 |
Use the yaml file to create the Ingress rule:
Code Block |
---|
|
kubectl create -f soavirt-ingress.yaml |
Once the service is created, you will need to create the configuration map for the soavirt server.
The server EULA must be accepted by setting 'parasoft.eula.accepted=true' in the ConfigMap.
Warning: When connecting to CTP the property 'server.hostname' should be set with the address of the Service.
Code Block |
---|
language | yml |
---|
title | soavirt-config.yaml |
---|
|
apiVersion: v1
kind: ConfigMap
metadata:
name: soavirt-config
data:
config.properties: |
# Configuration properties for soavirt server
# === END USER LICENSE AGREEMENT ===
# Set to true to accept the end user license agreement
# Please review the EULA.txt file included in the distribution zip for soavirt.war
parasoft.eula.accepted=false
# === WORKING DIRECTORY ===
# Specifies workspace location
#working.dir=
# === LOGGING CONFIGURATION ===
# Specifies configuration file for logging
logging.config.file=/WEB-INF/default.logging.xml
# Replace with the following line to enable debug information
#logging.config.file=/WEB-INF/debug.logging.xml
# === CTP SERVER ===
# Specifies CTP server endpoint
#env.manager.server=http\://[CTP Server Host]\:8080
# Specifies the server name that will be displayed in CTP
#env.manager.server.name=[Server Name]
# Specifies username for CTP authentication
#env.manager.username=[CTP Server Username]
# Specifies password for CTP authentication
#env.manager.password=[CTP Server Password]
# Enables notifications to CTP for deployments
#env.manager.notify=true
# === SERVLET CONTAINER PORTS ===
# Modify ports to match your servlet container settings
# Specifies port for http
server.port.http=9080
# Specifies port for https
#server.port.https=8443
# === PRODUCT LICENSING ===
# Enables virtualize functionality
virtualize.license.enabled=true
# Enables soatest functionality
soatest.license.enabled=true
# === NODE-LOCK LICENSE ===
# Specifies password for virtualize local license
#virtualize.license.local.password=
# Specifies password for soatest local license
#soatest.license.local.password=
# === NETWORK LICENSE ===
# Enables network licensing for virtualize
virtualize.license.use_network=true
# Specifies the type of network license for virtualize ['performance_server_edition','runtime_server_edition','custom_edition']
virtualize.license.network.edition=custom_edition
# Specifies features for virtualize 'custom_edition' license
virtualize.license.custom_edition_features=Service Enabled, Performance, Extension Pack, Validate, Message Packs, Developer Sandbox 1000 Hits/Day, 10000 Hits/Day, 25000 Hits/Day, 50000 Hits/Day, 100000 Hits/Day, 500000 Hits/Day, 1 Million Hits/Day, Unlimited Hits/Day, 30 HPS
# Enables network licensing for soatest
soatest.license.use_network=true
# Specifies the type of network license for soatest ['server_edition', 'server_edition_2011','custom_edition']
soatest.license.network.edition=custom_edition
# Specifies features for soatest 'custom_edition' license
soatest.license.custom_edition_features=RuleWizard, Command Line, SOA, Web, Server API Enabled, Jtest Connect, Stub Desktop, Stub Server, Message Packs, Advanced Test Generation Desktop, Advanced Test Generation 5 Users, Advanced Test Generation 25 Users, Advanced Test Generation 100 Users
# === LICENSE SERVER ===
# Enables using a specific license server
# If true, the license network properties below will be used to retrieve a license
# If false, the DTP server properties will be used to retrieve a license
license.network.use.specified.server=true
# Specifies license server host
license.network.host=snake.parasoft.com
# Specifies the connection type to the license server ['http','tcp']
license.network.connection.type=tcp
# Specifies license server port
# Common ports for http and tcp are [8443,2002]
license.network.port=2002
# Enables http authentication for the license server
license.network.auth.enabled=false
# Specifies username for license server authentication
#license.network.user=[License Server Username]
# Specifies password for license server authentication
#license.network.password=[License Server Password]
# === DTP SERVER ===
# Specifies DTP server host
#dtp.server=[DTP Server Host]
# Specifies DTP server port
#dtp.port=8443
# Specifies username for DTP authentication
#dtp.user=[DTP Server Username]
# Specifies password for DTP authentication
#dtp.password=[DTP Server Password]
# === MISC ===
# Specifies scripting timeout in minutes
#scripting.timeout.minutes=10
# === REPORTS ===
# Specifies a tag that represents a unique identifier for each run
# e.g., ${config_name}-${project_module}-${scontrol_branch}-${exec_env}
#session.tag=${config_name}
# Specifies a build identifier used to label results
#build.id=${dtp_project}-yyyy-MM-dd
# Specifies data that should be included in the report
#report.developer_errors=true
#report.developer_reports=true
#report.authors_details=true
#report.testcases_details=false
#report.test_suites_only=true
#report.failed_tests_only=false
#report.associations=false
#report.assoc.url.pr=
#report.assoc.url.fr=
#report.assoc.url.task=
#report.assoc.url.req=
#report.assoc.url.test= |
Use the yaml file to create the configuration map for the soavirt server:
Code Block |
---|
|
kubectl create -f soavirt-config.yaml |
The following creates the soavirt server. If a custom Persistent Volume Claim name was used in previous steps make sure to update the 'claimName' field to match the custom name.
Warning: When scaling beyond one replica, the events and statistics services should be disabled.
Code Block |
---|
language | yml |
---|
title | soavirt.yaml |
---|
|
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: soavirt
labels:
tag: soavirt
spec:
replicas: 1
selector:
matchLabels:
tag: soavirt
serviceName: soavirt
template:
metadata:
labels:
tag: soavirt
spec:
volumes:
- name: soavirt-pv
persistentVolumeClaim:
claimName: soavirt-pvc
- name: soavirt-config
configMap:
name: soavirt-config
containers:
- name: soavirt
image: parasoft/soavirt-server
imagePullPolicy: IfNotPresent
volumeMounts:
- name: soavirt-pv
mountPath: /usr/local/parasoft/soavirt/webapps/ROOT/workspace
- name: soavirt-config
mountPath: /usr/local/parasoft/soavirt/webapps/config.properties
subPath: config.properties
ports:
- name: http
containerPort: 9080
- name: events
containerPort: 9617
- name: statistics
containerPort: 9618
startupProbe:
httpGet:
path: /soavirt/api/v6/status?fields=machineId
port: 9080
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 30
failureThreshold: 3
livenessProbe:
httpGet:
path: /soavirt/api/v6/status?fields=machineId
port: 9080
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 30
readinessProbe:
httpGet:
path: /soavirt/api/v6/virtualAssets?fields=id
port: 9080
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 30
env:
- name: CATALINA_OPTS
value: "-Dparasoft.auto.deploy.new=false
-Dparasoft.event.monitoring.broker.port=9617
-Dparasoft.server.statistics.broker.port=9618" |
Use the yaml file to create the soavirt server:
Code Block |
---|
|
kubectl create -f soavirt.yaml |