Deploy the trigger on the Production Centre¶
This Jupyter Notebook creates a Web Processing Service request on the Ellip Platform Deployer to deploy the trigger and its associated coordinators on the Production Centre.
- First do the imports of the Python libraries required
In [1]:
import os
import getpass
import lxml.etree as etree
import owslib
from owslib.wps import monitorExecution
from owslib.wps import WebProcessingService
from nbconvert.preprocessors import ExecutePreprocessor, CellExecutionError
import nbformat as nbf
- Load the data pipeline configuration
In [2]:
%store -r
nb_config = os.path.join('..', 'configuration.ipynb')
nb = nbf.read(nb_config, 4)
exec(nb['cells'][1]['source']) in globals(), locals()
trigger_queue = dict([('artifact_id', trigger_queue_artifact_id),
('version', trigger_queue_version),
('repository', repository),
('folder', folder),
('community', community)])
trigger_pipe = dict([('artifact_id', trigger_pipe_artifact_id),
('version', trigger_pipe_version),
('repository', repository),
('folder', folder),
('community', community)])
trigger_queue_process_id = '%s_%s_%s_%s' % (trigger_queue['community'].replace('-', '_'),
trigger_queue['artifact_id'].replace('-', '_'),
trigger_queue['artifact_id'].replace('-', '_'),
trigger_queue['version'].replace('.', '_'))
trigger_pipe_process_id = '%s_%s_%s_%s' % (trigger_pipe['community'].replace('-', '_'),
trigger_pipe['artifact_id'].replace('-', '_'),
trigger_pipe['artifact_id'].replace('-', '_'),
trigger_pipe['version'].replace('.', '_'))
In [3]:
trigger_queue_process_id
Out[3]:
'ec_better_tg_wfp_01_01_02_queue_tg_wfp_01_01_02_queue_0_8'
- Connect to the WPS server and do a GetCapabilities request to check if the deploy process is available:
In [4]:
wps_url = '%s/zoo-bin/zoo_loader.cgi' % trigger_deployer
wps = WebProcessingService(wps_url, verbose=False, skip_caps=True)
wps.getcapabilities()
In [5]:
deploy_process_available = False
for index, elem in enumerate(wps.processes):
if 'TerradueDeployProcess' in elem.identifier:
deploy_process_available = True
if deploy_process_available:
print 'TerradueDeployProcess is available'
else:
raise Exception('TerradueDeployProcess is not available')
TerradueDeployProcess is available
- Select the TerradueDeployProcess process to submit a DescribeProcess request and list the inputs:
In [6]:
process_id = 'TerradueDeployProcess'
process = wps.describeprocess(process_id)
for data_input in process.dataInputs:
print data_input.identifier
print '----'
for process_output in process.processOutputs:
print process_output.identifier
applicationPackage
apikey
coordinator
----
deployResult
Deploy Trigger-Queue on Production Centre¶
- Submit the Execute WPS request:
In [7]:
ows_context_url = '/%s/_applications/%s/%s/%s/%s-%s-application-context.xml' % (trigger_queue['community'],
trigger_queue['community'],
trigger_queue['artifact_id'],
trigger_queue['version'],
trigger_queue['artifact_id'],
trigger_queue['version'])
print 'Deploying %s' % ows_context_url
inputs = [('applicationPackage', ows_context_url),
('apikey', ellip_api_key),
('coordinator', 'True')]
execution = owslib.wps.WPSExecution(url=wps.url)
execution_request = execution.buildRequest(process_id,
inputs,
output=[('deployResult', False)])
execution_response = execution.submitRequest(etree.tostring(execution_request))
execution.parseResponse(execution_response)
monitorExecution(execution)
if execution.isSucceded():
print 'Trigger %s deployment is successful' % trigger_queue_process_id
else:
raise Exception('Trigger %s deployment failed' % trigger_queue_process_id)
Deploying /ec-better/_applications/ec-better/tg-wfp-01-01-02-queue/0.8/tg-wfp-01-01-02-queue-0.8-application-context.xml
Trigger ec_better_tg_wfp_01_01_02_queue_tg_wfp_01_01_02_queue_0_8 deployment is successful
- Check the new WPS capabilities:
In [8]:
wps = WebProcessingService(wps_url, verbose=False, skip_caps=True)
wps.getcapabilities()
trigger_queue_deployed = False
for index, elem in enumerate(wps.processes):
if elem.identifier == trigger_queue_process_id:
trigger_queue_deployed = True
if trigger_queue_deployed:
print 'Process %s deployed to %s' % (trigger_queue_process_id,trigger_deployer)
else:
raise Exception('Process %s not deployed' % trigger_queue_process_id)
Process ec_better_tg_wfp_01_01_02_queue_tg_wfp_01_01_02_queue_0_8 deployed to https://ec-better-triggers-deployer-creodias-c1.terradue.com
Check and Deploy Trigger-Pipe on Production Centre¶
In [9]:
trigger_pipe_process_id
Out[9]:
'ec_better_tg_pipe_tg_pipe_0_7_4'
In [10]:
wps = WebProcessingService(wps_url, verbose=False, skip_caps=True)
wps.getcapabilities()
trigger_pipe_deployed = False
for index, elem in enumerate(wps.processes):
if elem.identifier == trigger_pipe_process_id:
trigger_pipe_deployed = True
if trigger_pipe_deployed :
print 'Process %s already deployed to %s' % (trigger_pipe_process_id,trigger_deployer)
else:
print 'Process %s is NOT deployed to %s' % (trigger_pipe_process_id,trigger_deployer)
ows_context_url = '/%s/_applications/%s/%s/%s/%s-%s-application-context.xml' % (trigger_pipe['community'],
trigger_pipe['community'],
trigger_pipe['artifact_id'],
trigger_pipe['version'],
trigger_pipe['artifact_id'],
trigger_pipe['version'])
print 'Deploying %s' % ows_context_url
inputs = [('applicationPackage', ows_context_url),
('apikey', ellip_api_key),
('coordinator', 'True')]
execution = owslib.wps.WPSExecution(url=wps.url)
execution_request = execution.buildRequest(process_id,
inputs,
output=[('deployResult', False)])
execution_response = execution.submitRequest(etree.tostring(execution_request))
execution.parseResponse(execution_response)
monitorExecution(execution)
if execution.isSucceded():
print 'Trigger %s deployment is successful' % trigger_pipe_process_id
else:
raise Exception('Trigger %s deployment failed' % trigger_pipe_process_id)
Process ec_better_tg_pipe_tg_pipe_0_7_4 already deployed to https://ec-better-triggers-deployer-creodias-c1.terradue.com
- If trigger trigger_pipe has been deployed in the previous step then check the new WPS capabilities:
In [11]:
if not trigger_pipe_deployed:
wps = WebProcessingService(wps_url, verbose=False, skip_caps=True)
wps.getcapabilities()
trigger_pipe_deployed = False
for index, elem in enumerate(wps.processes):
if elem.identifier == trigger_pipe_process_id:
trigger_pipe_deployed = True
if trigger_pipe_deployed:
print 'Process %s deployed to %s' % (trigger_pipe_process_id,trigger_deployer)
else:
raise Exception('Process %s not deployed to ' % trigger_pipe_process_id)