Deploy the triggers 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.

In [25]:
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
  • Read the data pipeline configuration information:
In [26]:
%store -r

nb_config = os.path.join('..', 'configuration.ipynb')

nb = nbf.read(nb_config, 4)

exec(nb['cells'][0]['source']) in globals(), locals()
#exec(nb['cells'][1]['source']) in globals(), locals()

  • Define the trigger information
In [27]:
trigger_queue = dict([('artifact_id', trigger_queue_artifact_id),
                      ('version', trigger_queue_version),
                      ('repository', repository),
                      ('folder', folder),
                      ('community', community)])

trigger_queue_ss = dict([('artifact_id', trigger_queue_ss_artifact_id),
                         ('version', trigger_queue_ss_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_queue_ss_process_id = '%s_%s_%s_%s' % (trigger_queue_ss['community'].replace('-', '_'),
                                               trigger_queue_ss['artifact_id'].replace('-', '_'),
                                               trigger_queue_ss['artifact_id'].replace('-', '_'),
                                               trigger_queue_ss['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('.', '_'))
  • Connect to the WPS server and do a GetCapabilities request to list the available process:
In [28]:
wps_url = '%s/zoo-bin/zoo_loader.cgi' % trigger_deployer

wps = WebProcessingService(wps_url, verbose=False, skip_caps=True)

wps.getcapabilities()
In [29]:
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 [30]:
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
  • Submit the Execute WPS request:
In [31]:
for trigger in [trigger_queue, trigger_queue_ss, trigger_pipe]:

    ows_context_url = '/%s/_applications/%s/%s/%s/%s-%s-application-context.xml' % (trigger['community'],
                                                                                    trigger['community'],
                                                                                    trigger['artifact_id'],
                                                                                    trigger['version'],
                                                                                    trigger['artifact_id'],
                                                                                    trigger['version'])

    trigger_process_id = '%s_%s_%s_%s' % (trigger['community'].replace('-', '_'),
                                          trigger['artifact_id'].replace('-', '_'),
                                          trigger['artifact_id'].replace('-', '_'),
                                          trigger['version'].replace('.', '_'))

    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 'Application %s deployment is successful' % trigger_process_id
    else:
        raise Exception('Application %s deployment failed' % trigger_process_id)
Deploying /ec-better/_applications/ec-better/tg-wfp-01-02-02-queue-ss/0.10/tg-wfp-01-02-02-queue-ss-0.10-application-context.xml
Application ec_better_tg_wfp_01_02_02_queue_ss_tg_wfp_01_02_02_queue_ss_0_10 deployment is successful
  • Check the new WPS capabilities:
In [32]:
wps = WebProcessingService(wps_url, verbose=False, skip_caps=True)
wps.getcapabilities()

trigger_queue_deployed = False
trigger_queue_ss_deployed = False
trigger_pipe_deployed = False

for index, elem in enumerate(wps.processes):
    if elem.identifier == trigger_queue_process_id:
        trigger_queue_deployed = True

    if elem.identifier == trigger_queue_ss_process_id:
        trigger_queue_ss_deployed = True

    if elem.identifier == trigger_pipe_process_id:
        trigger_pipe_deployed = True

if trigger_queue_deployed:
    print 'Process %s deployed' % trigger_queue_process_id
else:
    raise Exception('Process %s not deployed' % trigger_queue_process_id)


if trigger_queue_ss_deployed:
    print 'Process %s deployed' % trigger_queue_ss_process_id
else:
    raise Exception('Process %s not deployed' % trigger_queue_ss_process_id)

if trigger_pipe_deployed:
    print 'Process %s deployed' % trigger_pipe_process_id
else:
    raise Exception('Process %s not deployed' % trigger_pipe_process_id)
Process ec_better_tg_wfp_01_02_02_queue_tg_wfp_01_02_02_queue_0_4 deployed
Process ec_better_tg_wfp_01_02_02_queue_ss_tg_wfp_01_02_02_queue_ss_0_10 deployed
Process ec_better_tg_wfp_01_02_02_pipe_tg_wfp_01_02_02_pipe_0_7 deployed