summaryrefslogtreecommitdiffstats
path: root/cdap
diff options
context:
space:
mode:
Diffstat (limited to 'cdap')
-rw-r--r--cdap/.gitignore3
-rw-r--r--cdap/Changelog.md60
-rw-r--r--cdap/LICENSE.txt32
-rw-r--r--cdap/README.md178
-rwxr-xr-xcdap/cdap_types.yaml129
-rw-r--r--cdap/cdapplugin/.coveragerc25
-rw-r--r--cdap/cdapplugin/cdapcloudify/__init__.py30
-rw-r--r--cdap/cdapplugin/cdapcloudify/cdap_plugin.py288
-rw-r--r--cdap/cdapplugin/cdapcloudify/discovery.py132
-rw-r--r--cdap/cdapplugin/requirements.txt3
-rw-r--r--cdap/cdapplugin/setup.py40
-rw-r--r--cdap/cdapplugin/tests/test_cdap_plugin.py103
-rw-r--r--cdap/cdapplugin/tests/test_discovery.py114
-rw-r--r--cdap/cdapplugin/tox-local.ini30
-rw-r--r--cdap/cdapplugin/tox.ini29
-rw-r--r--cdap/demo_blueprints/cdap_hello_world.yaml68
-rwxr-xr-xcdap/demo_blueprints/cdap_hello_world_reconfigure.sh21
-rw-r--r--cdap/demo_blueprints/cdap_hello_world_with_dmaap.yaml165
-rw-r--r--cdap/demo_blueprints/cdap_hello_world_with_laika.yaml97
-rw-r--r--cdap/demo_blueprints/cdap_hello_world_with_mr.yaml151
-rw-r--r--cdap/pom.xml167
21 files changed, 0 insertions, 1865 deletions
diff --git a/cdap/.gitignore b/cdap/.gitignore
deleted file mode 100644
index f5e9b16..0000000
--- a/cdap/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-cfyhelper.sh
-cdapplugin/coverage-reports/
-cdapplugin/xunit-reports/*
diff --git a/cdap/Changelog.md b/cdap/Changelog.md
deleted file mode 100644
index 53220e7..0000000
--- a/cdap/Changelog.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Change Log
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](http://keepachangelog.com/)
-and this project adheres to [Semantic Versioning](http://semver.org/).
-
-## [14.3.0]
-* DCAEGEN2-1956 support python3 in all plugins
-
-## [14.2.5] - Sep 21 2017
-* Use the public pypi version of policy lib
-
-## [14.2.4] - Sep 15 2017
-* Add decorator usage to DRY up code
-
-## [14.2.3] - Sep 14 2017
-* Remove the raise for status from discovery into tasks, allows for unit testing
-* Unit test discovery
-
-## [14.2.2] - MISSING
-
-## [14.2.1] - MISSING
-
-## [14.2.0]
-* Integrate with Policy handler. Policy handling for CDAP is done.
-
-## [14.1.0]
-* Merge the broker deleter function into here; no need for separate plugin
-
-## [14.0.2]
-* Start a tox/pytest unit test suite
-
-## [14.0.1]
-* Type file change to move reconfiguration defaults into the type file so each blueprint doesn't need them.
-
-## [14.0.0]
-* Better type speccing in the type file
-* Simplify the component naming
-* Remove the unused (after two years) location and service-id properties
-* Add more demo blueprints and reconfiguration tests
-
-## [13.0.0]
-* Support for data router publication. Data router subscription is a problem, see README.
-* Fixes `services_calls` to have the same format as streams. This is an API break but users are aware.
-
-## [12.1.0]
-* Support for message router integration. Data router publish to come in next release.
-
-## [12.0.1]
-* Use "localhost" instead of solutioning Consul host.
-
-## [12.0.0]
-* Add in functions for policy to call (execute_workflows) to reconfigure CDAP applications
-* Remove "Selected" Nonsense.
-
-FAILURE TO UPDATE
-
-## [10.0.0]
-* Update to support broker API 3.X. This is a breaking change, involving the renaming of Node types
-* Cut dependencies over to Nexus
diff --git a/cdap/LICENSE.txt b/cdap/LICENSE.txt
deleted file mode 100644
index cb8008a..0000000
--- a/cdap/LICENSE.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-============LICENSE_START=======================================================
-org.onap.dcae
-================================================================================
-Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-================================================================================
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-============LICENSE_END=========================================================
-
-ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-
-Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-===================================================================
-Licensed under the Creative Commons License, Attribution 4.0 Intl. (the "License");
-you may not use this documentation except in compliance with the License.
-You may obtain a copy of the License at
- https://creativecommons.org/licenses/by/4.0/
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/cdap/README.md b/cdap/README.md
deleted file mode 100644
index b1601a7..0000000
--- a/cdap/README.md
+++ /dev/null
@@ -1,178 +0,0 @@
-# cdap-cloudify
-Contains a plugin and type file for deploying CDAP and related artifacts.
-
-# service component name
-When the cdap plugin deploys an application, it generates a service component name. That service component name is injected
-into the node's runtime dictionary under the key "service_component_name" and also made available as an output under this key.
-
-# Demo blueprints
-There is a subfolder in this repo called `demo_blueprints` that contains (templatized) example blueprints.
-
-# Connections
-Since you cannot type-spec complicated objects in a cloudify node type, I have to explain this here. This is a requirement on all blueprints that use this node type.
-
-There is a property at the top level of the CDAP node called `connections` that is expecting a specific structure, best serviced with examples.
-
-## DMaaP
-
-### Message Router
-Message router publication
-```
- connections:
- streams_publishes: // is a list
- - name: topic00 // THIS NAME MUST MATCH THE NODE NAME IN BLUEPRINT, SEE BELOW*
- location: mtc5
- client_role: XXXX
- type: message_router
- config_key: "myconfigkey1" // from spec
- aaf_username: { get_input: aafu1 }
- aaf_password: { get_input: aafp1 }
- - name: topic01 // THIS NAME MUST MATCH THE NODE NAME IN BLUEPRINT, SEE BELOW*
- location: mtc5
- client_role: XXXX
- type: message_router
- config_key: "myconfigkey2" // from spec
- aaf_username: { get_input: aafu2 }
- aaf_password: { get_input: aafp2 }
-```
-Message router subscription is the exact same format, except change `streams_publishes` to `streams_subscribes`:
-```
- streams_subscribes:
- - name: topic00 #MEANT FOR DEMO ONLY! Subscribing and publishing to same topic. Not real example.
- location: mtc5
- client_role: XXXX
- type: message_router
- config_key: "myconfigkey2"
- aaf_username: { get_input: aafu2 }
- aaf_password: { get_input: aafp2 }
- - name: topic01
- location: mtc5
- client_role: XXXX
- type: message_router
- config_key: "myconfigkey3"
- aaf_username: { get_input: aafu3 }
- aaf_password: { get_input: aafp3 }
-```
-The terms `streams_publishes` and `streams_subscribes` comes from the component specification.
-
-### Data Router
-For publication, data router does not have the notion of AAF credentials, and there is no `client_role`. So the expected blueprint input is simpler than the MR case:
-```
- streams_publishes:
- ...
- - name: feed00
- location: mtc5
- type: data_router
- config_key: "mydrconfigkey"
-```
-
-Data router subscription is not supported because there is an impedance mismatch between DR and CDAP.
-CDAP streams expect a POST but DR outputs a PUT.
-Some future platform capability needs to fill this hole; either something like the AF team's DR Sub or DMD.
-
-### Bound configuration
-The above blueprint snippets will lead to the cdap application's `app_config` getting an entry that looks like this:
-```
-{
- "streams_subscribes":{
- "myconfigkey3":{
- "type":"message_router",
- "aaf_username":"foo3",
- "aaf_password":"bar3",
- "dmaap_info":{
- "client_role":"XXXX",
- "client_id":"XXXX",
- "location":"XXXX",
- "topic_url":"XXXX"
- }
- },
- "myconfigkey2":{
- "type":"message_router",
- "aaf_username":"foo2",
- "aaf_password":"bar2",
- "dmaap_info":{
- "client_role":"XXXX",
- "client_id":"XXXX",
- "location":"XXXX",
- "topic_url":"XXXX"
- }
- }
- },
- "streams_publishes":{
- "myconfigkey1":{
- "type":"message_router",
- "aaf_username":"foo1",
- "aaf_password":"bar1",
- "dmaap_info":{
- "client_role":"XXXX",
- "client_id":"XXXX",
- "location":"XXXX",
- "topic_url":"XXXX"
- }
- },
- "mydrconfigkey":{
- "type":"data_router",
- "dmaap_info":{
- "username":"XXXX",
- "location":"XXXX",
- "publish_url":"XXXX",
- "publisher_id":"XXXX",
- "log_url":"XXXX",
- "password":"XXXX"
- }
- },
- "myconfigkey0":{
- "type":"message_router",
- "aaf_username":"foo0",
- "aaf_password":"bar0",
- "dmaap_info":{
- "client_role":"XXXX",
- "client_id":"XXXX",
- "location":"XXXX",
- "topic_url":"XXXX"
- }
- }
- }
-}
-```
-## HTTP
-In addition to DMaaP, we support HTTP services.
-
-### Services Calls
-In a blueprint, to express that one component calls asynchronous HTTP service of another component, writing this as `A -> B,` you need:
-
-1. `A` to have a `connections/services_calls` entry:
-```
- connections:
- services_calls:
- - service_component_type: laika
- config_key: "laika_handle"
-```
-2. A relationship of type `dcae.relationships.component_connected_to` from A to B.
-
-3. The `B` node's `service_component_type` should match #1
-
-See the demo blueprint `cdap_hello_world_with_laika.yaml`
-
-### Bound Configuration
-
-The above (without having defined streams) will lead to:
-```
-{
- "streams_subscribes":{
-
- },
- "streams_publishes":{
-
- },
- "services_calls":{
- "laika_handle":[
- "some_up:some_port"
- ]
- }
-}
-```
-Note that the value is always a list of IP:Ports because there could be multiple identical services that satisfy the client (A in this case). This is client side load balancing.
-
-# Tests
-To run the tests, you need `tox`. You can get it with `pip install tox`. After that, simply run `tox -c tox-local.ini` from inside the `cdapplugin` directory to run the tests and generate a coverage report.
diff --git a/cdap/cdap_types.yaml b/cdap/cdap_types.yaml
deleted file mode 100755
index ae0f146..0000000
--- a/cdap/cdap_types.yaml
+++ /dev/null
@@ -1,129 +0,0 @@
-# ================================================================================
-# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-tosca_definitions_version: cloudify_dsl_1_3
-
-imports:
- - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
-plugins:
- cdap_deploy:
- executor: central_deployment_agent
- package_name: cdapcloudify
- package_version: 14.3.0
-
-data_types:
- cdap_connections:
- properties:
- services_calls:
- default: []
- streams_publishes:
- default: []
- streams_subscribes:
- default: []
-
-node_types:
- dcae.nodes.MicroService.cdap:
- derived_from: cloudify.nodes.Root
- properties:
- service_component_type:
- type: string
- #####
- #For the following parameters in this block, see the Broker API
- #####
- jar_url:
- type: string
- artifact_name:
- type: string
- artifact_version:
- type: string
- connections:
- type: cdap_connections
- app_config:
- default: {}
- app_preferences:
- default: {}
- program_preferences:
- default: []
- programs:
- default: []
- streamname:
- #currently, we only support CDAP apps written that read from a
- #stream. This is not the only ingest mechanism for CDAP. This may have to change/get
- type: string
- namespace:
- #the namespace to deploy the CDAP app into
- #defaults to the default cdap namespace which is called "default"
- type: string
- default : "default"
- service_endpoints:
- default: []
-
- interfaces:
- cloudify.interfaces.lifecycle:
- create:
- implementation: cdap_deploy.cdapcloudify.cdap_plugin.create
- inputs:
- connected_broker_dns_name:
- type: string
- description: This is the broker's DNS name. There could be multiple brokers/clusters at a site. Could by populated via an intrinsic_function in a blueprint, or manually via inputs file
- default: "cdap_broker"
- start:
- cdap_deploy.cdapcloudify.cdap_plugin.deploy_and_start_application
- delete:
- cdap_deploy.cdapcloudify.cdap_plugin.stop_and_undeploy_application
-
- dcae.interfaces.policy:
- policy_update:
- implementation:
- cdap_deploy.cdapcloudify.cdap_plugin.policy_update
- inputs:
- updated_policies:
- description: "list of policy objects"
- default: []
-
- #TODO: These can probably go away after policy_update is implemented
- reconfiguration:
- app_config_reconfigure:
- implementation: cdap_deploy.cdapcloudify.cdap_plugin.app_config_reconfigure
- inputs:
- new_config_template:
- description: "new unbound config for the CDAP AppConfig as a JSON"
- default: {}
- app_preferences_reconfigure:
- implementation: cdap_deploy.cdapcloudify.cdap_plugin.app_preferences_reconfigure
- inputs:
- new_config_template:
- description: "new bound config for the CDAP AppPreferences as a JSON"
- default: {}
- app_smart_reconfigure:
- implementation: cdap_deploy.cdapcloudify.cdap_plugin.app_smart_reconfigure
- inputs:
- new_config_template:
- description: "new unbound config for the CDAP AppConfig as a JSON"
- default: {}
-
- dcae.nodes.broker_deleter:
- derived_from: cloudify.nodes.Root
- interfaces:
- cloudify.interfaces.lifecycle:
- delete: #stop better than delete? not sure it matters much. Think all source interfaces are operated on before target on uninstall.
- implementation: cdap_deploy.cdapcloudify.cdap_plugin.delete_all_registered_apps
- inputs:
- connected_broker_dns_name:
- type: string
- description: This is the broker's DNS name. There could be multiple brokers/clusters at a site. Could by populated via an intrinsic_function in a blueprint, or manually via inputs file
- default: "cdap_broker"
diff --git a/cdap/cdapplugin/.coveragerc b/cdap/cdapplugin/.coveragerc
deleted file mode 100644
index 7e87c60..0000000
--- a/cdap/cdapplugin/.coveragerc
+++ /dev/null
@@ -1,25 +0,0 @@
-# .coveragerc to control coverage.py
-[run]
-branch = True
-cover_pylib = False
-include = */cdapcloudify/*.py
-
-[report]
-# Regexes for lines to exclude from consideration
-exclude_lines =
- # Have to re-enable the standard pragma
- pragma: no cover
-
- # Don't complain about missing debug-only code:
- def __repr__
- if self\.debug
-
- # Don't complain if tests don't hit defensive assertion code:
- raise AssertionError
- raise NotImplementedError
-
- # Don't complain if non-runnable code isn't run:
- if 0:
- if __name__ == .__main__.:
-
-ignore_errors = True
diff --git a/cdap/cdapplugin/cdapcloudify/__init__.py b/cdap/cdapplugin/cdapcloudify/__init__.py
deleted file mode 100644
index 388ac55..0000000
--- a/cdap/cdapplugin/cdapcloudify/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# org.onap.dcae
-# ================================================================================
-# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-import logging
-
-def get_module_logger(mod_name):
- logger = logging.getLogger(mod_name)
- handler = logging.StreamHandler()
- formatter = logging.Formatter(
- '%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s')
- handler.setFormatter(formatter)
- logger.addHandler(handler)
- logger.setLevel(logging.DEBUG)
- return logger
diff --git a/cdap/cdapplugin/cdapcloudify/cdap_plugin.py b/cdap/cdapplugin/cdapcloudify/cdap_plugin.py
deleted file mode 100644
index a64354c..0000000
--- a/cdap/cdapplugin/cdapcloudify/cdap_plugin.py
+++ /dev/null
@@ -1,288 +0,0 @@
-# org.onap.dcae
-# ================================================================================
-# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-from onap_dcae_dcaepolicy_lib import Policies
-
-import requests
-from cloudify import ctx
-from cloudify.decorators import operation
-from cloudify.exceptions import NonRecoverableError
-import time
-import uuid
-import re
-from cdapcloudify import discovery
-import json
-import requests
-
-# Property keys
-SERVICE_COMPONENT_NAME = "service_component_name"
-SELECTED_BROKER = "selected_broker"
-PUB_C = "streams_publishes_for_config"
-SUB_C = "streams_subscribes_for_config"
-SER_C = "services_calls_for_config"
-STREAMS_PUBLISHES = "streams_publishes"
-STREAMS_SUBSCRIBES = "streams_subscribes"
-SERVICES_CALLS = "services_calls"
-
-# Custom Exception
-class BadConnections(NonRecoverableError):
- pass
-
-
-def _trigger_update(updated_policies):
- """
- Helper function for reconfiguring after a policy update
-
- updated_policies is assumed to be a list of JSONs that are applicable to the brokers smart interface
- """
- for p in updated_policies:
- ctx.logger.info("Reconfiguring CDAP application via smart interface")
- return discovery.reconfigure_in_broker(
- cdap_broker_name = ctx.instance.runtime_properties[SELECTED_BROKER],
- service_component_name = ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME],
- config = p,
- reconfiguration_type = "program-flowlet-smart",
- logger = ctx.logger)
-
-def _validate_conns(connections):
- """
- Cloudify allows you to type spec a data type in a type file, however it does not appear to do strict checking on blueprints against that.
- Sad!
- The "connections" block has an important structure to this plugin, so here we validate it and fail fast if it is not correct.
- """
- try:
- def _assert_ks_in_d(ks,d):
- for k in ks:
- assert(k in d)
- assert STREAMS_PUBLISHES in connections
- assert STREAMS_SUBSCRIBES in connections
- for s in connections[STREAMS_PUBLISHES] + connections[STREAMS_SUBSCRIBES]:
- _assert_ks_in_d(["name", "location", "type", "config_key"], s)
- assert(s["type"] in ["message_router", "data_router"])
- if s["type"] == "message_router":
- _assert_ks_in_d(["aaf_username", "aaf_password", "client_role"], s) #I am not checking that these are not blank. I will leave it possible for you to put empty values for these, but force you to acknowledge that you are doing so by not allowing these to be ommited.
- #nothing extra for DR; no AAF, no client role.
- except:
- raise BadConnections("Bad Connections definition in blueprint") #is a NoneRecoverable
-
-def _streams_iterator(streams):
- """
- helper function for iterating over streams_publishes and subscribes
- note! this is an impure function. it also sets the properties the dmaap plugin needs into runtime properties
- """
- for_config = {}
- for s in streams:
- if s["type"] == "message_router":
- #set the properties the DMaaP plugin needs
- ctx.instance.runtime_properties[s["name"]] = {"client_role" : s["client_role"], "location" : s["location"]}
- #form (or append to) the dict the component will get, including the template for the CBS
- for_config[s["config_key"]] = {"aaf_username" : s["aaf_username"], "aaf_password" : s["aaf_password"], "type" : s["type"], "dmaap_info" : "<< " + s["name"] + ">>"} #will get bound by CBS
- if s["type"] == "data_router":
- #set the properties the DMaaP plugin needs$
- ctx.instance.runtime_properties[s["name"]] = {"location" : s["location"]}
- #form (or append to) the dict the component will get, including the template for the CBS$
- for_config[s["config_key"]] = {"type" : s["type"], "dmaap_info" : "<<" + s["name"] + ">>"} #will get bound by CBS
-
- return for_config
-
-def _services_calls_iterator(services_calls):
- """
- helper function for iterating over services_calls
- """
- for_config = {}
- for s in services_calls:
- #form (or append to) the dict the component will get, including the template for the CBS
- for_config[s["config_key"]] = "{{ " + s["service_component_type"] + " }}" #will get bound by CBS
- return for_config
-
-######################
-# Decorators
-######################
-def try_raise_nonr(func):
- def inner(*args, **kwargs):
- try:
- return func(*args, **kwargs)
- except Exception as e:
- raise NonRecoverableError(e)
- return inner
-
-######################
-# Cloudify Operations
-######################
-
-@operation
-@try_raise_nonr
-def create(connected_broker_dns_name, **kwargs):
- """
- setup critical runtime properties
- """
-
- #fail fast
- _validate_conns(ctx.node.properties["connections"])
-
- #The config binding service needs to know whether cdap or docker. Currently (aug 1 2018) it looks for "cdap_app" in the name
- service_component_name = "{0}_cdap_app_{1}".format(str(uuid.uuid4()).replace("-",""), ctx.node.properties["service_component_type"])
-
- #set this into a runtime dictionary
- ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME] = service_component_name
-
- #fetch the broker name from inputs and set it in runtime properties so other functions can use it
- ctx.instance.runtime_properties[SELECTED_BROKER] = connected_broker_dns_name
-
- #set the properties the DMaap plugin expects for message router
- #see the README for the structures of these keys
- #NOTE! This has to be done in create because Jack's DMaaP plugin expects to do it's thing in preconfigure.
- # and we need to get this key into consul before start
- #set this as a runtime property for start to use
- ctx.instance.runtime_properties[PUB_C] = _streams_iterator(ctx.node.properties["connections"][STREAMS_PUBLISHES])
- ctx.instance.runtime_properties[SUB_C] = _streams_iterator(ctx.node.properties["connections"][STREAMS_SUBSCRIBES])
- ctx.instance.runtime_properties[SER_C] = _services_calls_iterator(ctx.node.properties["connections"][SERVICES_CALLS])
-
-@operation
-@try_raise_nonr
-@Policies.gather_policies_to_node
-def deploy_and_start_application(**kwargs):
- """
- pushes the application into the workspace and starts it
- """
- #parse TOSCA model params
- config_template = ctx.node.properties["app_config"]
-
- #there is a typed section in the node type called "connections", but the broker expects those two keys at the top level of app_config, so add them here
- #In cloudify you can't have a custom data type and then specify unknown propertys, the vlidation will fail, so typespeccing just part of app_config doesnt work
- #the rest of the CDAP app's app_config is app-dependent
- config_template[SERVICES_CALLS] = ctx.instance.runtime_properties[SER_C]
- config_template[STREAMS_PUBLISHES] = ctx.instance.runtime_properties[PUB_C]
- config_template[STREAMS_SUBSCRIBES] = ctx.instance.runtime_properties[SUB_C]
-
- #register with broker
- ctx.logger.info("Registering with Broker, config template was: {0}".format(json.dumps(config_template)))
- response = discovery.put_broker(
- cdap_broker_name = ctx.instance.runtime_properties[SELECTED_BROKER],
- service_component_name = ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME],
- namespace = ctx.node.properties["namespace"],
- streamname = ctx.node.properties["streamname"],
- jar_url = ctx.node.properties["jar_url"],
- artifact_name = ctx.node.properties["artifact_name"],
- artifact_version = ctx.node.properties["artifact_version"],
- app_config = config_template,
- app_preferences = ctx.node.properties["app_preferences"],
- service_endpoints = ctx.node.properties["service_endpoints"],
- programs = ctx.node.properties["programs"],
- program_preferences = ctx.node.properties["program_preferences"],
- logger = ctx.logger)
-
- response.raise_for_status() #bomb if not 2xx
-
- #TODO! Would be better to do an initial merge first before deploying, but the merge is complicated for CDAP
- #because of app config vs. app preferences. So, for now, let the broker do the work with an immediate reconfigure
- #get policies that may have changed prior to this blueprint deployment
- policy_configs = Policies.get_policy_configs()
- if policy_configs is not None:
- ctx.logger.info("Updated policy configs: {0}".format(policy_configs))
- response = _trigger_update(policy_configs)
- response.raise_for_status() #bomb if not 2xx
-
-@operation
-def stop_and_undeploy_application(**kwargs):
- #per jack Lucas, do not raise Nonrecoverables on any delete operation. Keep going on them all, cleaning up as much as you can.
- #bombing would also bomb the deletion of the rest of the blueprint
- ctx.logger.info("Undeploying CDAP application")
- try: #deregister with the broker, which will also take down the service from consul
- response = discovery.delete_on_broker(
- cdap_broker_name = ctx.instance.runtime_properties[SELECTED_BROKER],
- service_component_name = ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME],
- logger = ctx.logger)
- response.raise_for_status() #bomb if not 2xx
- except Exception as e:
- ctx.logger.error("Error deregistering from Broker, but continuing with deletion process: {0}".format(e))
-
-@operation
-def delete_all_registered_apps(connected_broker_dns_name, **kwargs):
- """
- Used in the cdap broker deleter node.
- Deletes all registered applications (in the broker)
- per jack Lucas, do not raise Nonrecoverables on any delete operation. Keep going on them all, cleaning up as much as you can.
- """
- ctx.logger.info("Undeploying CDAP application")
- try:
- response = discovery.delete_all_registered_apps(
- cdap_broker_name = connected_broker_dns_name,
- logger = ctx.logger)
- response.raise_for_status() #bomb if not 2xx
- except Exception as e:
- ctx.logger.error("Error deregistering from Broker, but continuing with deletion process: {0}".format(e))
-
-############
-#RECONFIGURATION
-# These calls works as follows:
-# 1) it expects "new_config_template" to be a key in kwargs, i.e., passed in using execute_operations -p parameter
-# 2) it pushes the new unbound config down to the broker
-# 3) broker deals with the rest
-############
-@operation
-@try_raise_nonr
-def app_config_reconfigure(new_config_template, **kwargs):
- """
- reconfigure the CDAP app's app config
- """
- ctx.logger.info("Reconfiguring CDAP application via app_config")
- response = discovery.reconfigure_in_broker(
- cdap_broker_name = ctx.instance.runtime_properties[SELECTED_BROKER],
- service_component_name = ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME],
- config = new_config_template, #This keyname will likely change per policy handler
- reconfiguration_type = "program-flowlet-app-config",
- logger = ctx.logger)
- response.raise_for_status() #bomb if not 2xx
-
-@operation
-@try_raise_nonr
-def app_preferences_reconfigure(new_config_template, **kwargs):
- """
- reconfigure the CDAP app's app preferences
- """
- ctx.logger.info("Reconfiguring CDAP application via app_preferences")
- response = discovery.reconfigure_in_broker(
- cdap_broker_name = ctx.instance.runtime_properties[SELECTED_BROKER],
- service_component_name = ctx.instance.runtime_properties[SERVICE_COMPONENT_NAME],
- config = new_config_template, #This keyname will likely change per policy handler
- reconfiguration_type = "program-flowlet-app-preferences",
- logger = ctx.logger)
- response.raise_for_status() #bomb if not 2xx
-
-@operation
-@try_raise_nonr
-def app_smart_reconfigure(new_config_template, **kwargs):
- """
- reconfigure the CDAP app via the broker smart interface
- """
- ctx.logger.info("Reconfiguring CDAP application via smart interface")
- response = _trigger_update([new_config_template])
- response.raise_for_status() #bomb if not 2xx
-
-@operation
-@try_raise_nonr
-@Policies.update_policies_on_node(configs_only=True)
-def policy_update(updated_policies, **kwargs):
- #its already develiered through policy
- ctx.logger.info("Policy update recieved. updated policies: {0}".format(updated_policies))
- #TODO! In the future, if we really have many different policies, would be more efficient to do a single merge here.
- #However all use cases today are a single policy so OK with this for loop for now.
- response = _trigger_update(updated_policies)
- response.raise_for_status() #bomb if not 2xx
-
diff --git a/cdap/cdapplugin/cdapcloudify/discovery.py b/cdap/cdapplugin/cdapcloudify/discovery.py
deleted file mode 100644
index e20258f..0000000
--- a/cdap/cdapplugin/cdapcloudify/discovery.py
+++ /dev/null
@@ -1,132 +0,0 @@
-# org.onap.dcae
-# ================================================================================
-# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-import requests
-import json
-
-CONSUL_HOST = "http://localhost:8500"
-
-def _get_connection_info_from_consul(service_component_name, logger):
- """
- Call consul's catalog
- TODO: currently assumes there is only one service
- """
- url = "{0}/v1/catalog/service/{1}".format(CONSUL_HOST, service_component_name)
- logger.info("Trying to query: {0}".format(url))
- res = requests.get(url)
- res.raise_for_status()
- services = res.json()
- return services[0]["ServiceAddress"], services[0]["ServicePort"]
-
-def _get_broker_url(cdap_broker_name, service_component_name, logger):
- """
- fetch the broker connection information from Consul
- """
- broker_ip, broker_port = _get_connection_info_from_consul(cdap_broker_name, logger)
- broker_url = "http://{ip}:{port}/application/{appname}".format(ip=broker_ip, port=broker_port, appname=service_component_name)
- logger.info("Trying to connect to broker endpoint: {0}".format(broker_url))
- return broker_url
-
-"""
-decorators
-"""
-def run_response(func):
- """
- decorator for generic http call, log the response, and return the flask response
-
- make sure you call the functons below using logger as a kwarg!
- """
- def inner(*args, **kwargs):
- logger = kwargs["logger"]
- response = func(*args, **kwargs)
- logger.info((response, response.status_code, response.text))
- return response #let the caller deal with the response
- return inner
-
-"""
-public
-"""
-@run_response
-def put_broker(cdap_broker_name,
- service_component_name,
- namespace,
- streamname,
- jar_url,
- artifact_name,
- artifact_version,
- app_config,
- app_preferences,
- service_endpoints,
- programs,
- program_preferences,
- logger):
- """
- Conforms to Broker API 4.X
- """
-
- data = dict()
- data["cdap_application_type"] = "program-flowlet"
- data["namespace"] = namespace
- data["streamname"] = streamname
- data["jar_url"] = jar_url
- data["artifact_name"] = artifact_name
- data["artifact_version"] = artifact_version
- data["app_config"] = app_config
- data["app_preferences"] = app_preferences
- data["services"] = service_endpoints
- data["programs"] = programs
- data["program_preferences"] = program_preferences
-
- #register with the broker
- return requests.put(_get_broker_url(cdap_broker_name, service_component_name, logger),
- json = data,
- headers = {'content-type':'application/json'})
-
-@run_response
-def reconfigure_in_broker(cdap_broker_name,
- service_component_name,
- config,
- reconfiguration_type,
- logger):
- #trigger a reconfiguration with the broker
- #man am I glad I broke the broker API from 3 to 4 to standardize this interface because now I only need one function here
- return requests.put("{u}/reconfigure".format(u = _get_broker_url(cdap_broker_name, service_component_name, logger)),
- headers = {'content-type':'application/json'},
- json = {"reconfiguration_type" : reconfiguration_type,
- "config" : config})
-
-@run_response
-def delete_on_broker(cdap_broker_name, service_component_name, logger):
- #deregister with the broker
- return requests.delete(_get_broker_url(cdap_broker_name, service_component_name, logger))
-
-@run_response
-def delete_all_registered_apps(cdap_broker_name, logger):
- #get the broker connection
- broker_ip, broker_port = _get_connection_info_from_consul(cdap_broker_name, logger)
- broker_url = "http://{ip}:{port}".format(ip=broker_ip, port=broker_port)
-
- #binge and purge
- logger.info("Trying to connect to broker called {0} at {1}".format(cdap_broker_name, broker_url))
- registered_apps = json.loads(requests.get("{0}/application".format(broker_url)).text) #should be proper list of strings (appnames)
- logger.info("Trying to delete: {0}".format(registered_apps))
- return requests.post("{0}/application/delete".format(broker_url),
- headers = {'content-type':'application/json'},
- json = {"appnames" : registered_apps})
-
diff --git a/cdap/cdapplugin/requirements.txt b/cdap/cdapplugin/requirements.txt
deleted file mode 100644
index 43a0ea1..0000000
--- a/cdap/cdapplugin/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-onap-dcae-dcaepolicy-lib==1.0.0
-cloudify-common>=5.0.0; python_version<"3"
-cloudify-common @ git+https://github.com/cloudify-cosmo/cloudify-common@cy-1374-python3#egg=cloudify-common==5.0.0; python_version>="3"
diff --git a/cdap/cdapplugin/setup.py b/cdap/cdapplugin/setup.py
deleted file mode 100644
index 5ef6cc6..0000000
--- a/cdap/cdapplugin/setup.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# org.onap.dcae
-# ================================================================================
-# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-# Copyright (c) 2019 Pantheon.tech. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-import os
-from setuptools import setup, find_packages
-
-setup(
- name = "cdapcloudify",
- version = "14.3.0",
- packages=find_packages(),
- author = "Tommy Carpenter",
- author_email = "tommy@research.att.com",
- description = ("Cloudify plugin for CDAP"),
- license = "",
- keywords = "",
- url = "https://gerrit.onap.org/r/#/admin/projects/dcaegen2/platform/plugins",
- zip_safe=False,
- install_requires = [
- # FIXME: not compatible with latest version
- 'onap-dcae-dcaepolicy-lib==1.0.0',
- 'cloudify-common>=5.0.0',
- ]
-)
diff --git a/cdap/cdapplugin/tests/test_cdap_plugin.py b/cdap/cdapplugin/tests/test_cdap_plugin.py
deleted file mode 100644
index f28485d..0000000
--- a/cdap/cdapplugin/tests/test_cdap_plugin.py
+++ /dev/null
@@ -1,103 +0,0 @@
-# org.onap.dcae
-# ================================================================================
-# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-from cdapcloudify.cdap_plugin import _validate_conns, BadConnections, try_raise_nonr
-import pytest
-from cloudify.exceptions import NonRecoverableError
-
-#todo.. add more tests.. #shame
-
-def _get_good_connection():
- connections = {}
- connections["streams_publishes"] = [
- {"name" : "test_n",
- "location" : "test_l",
- "client_role" : "test_cr",
- "type" : "message_router",
- "config_key" : "test_c",
- "aaf_username": "test_u",
- "aaf_password": "test_p"
- },
- {"name" : "test_n2",
- "location" : "test_l",
- "client_role" : "test_cr",
- "type" : "message_router",
- "config_key" : "test_c",
- "aaf_username": "test_u",
- "aaf_password": "test_p"
- },
- {"name" : "test_feed00",
- "location" : "test_l",
- "type" : "data_router",
- "config_key" : "mydrconfigkey"
- }
- ]
- connections["streams_subscribes"] = [
- {"name" : "test_n",
- "location" : "test_l",
- "client_role" : "test_cr",
- "type" : "message_router",
- "config_key" : "test_c",
- "aaf_username": "test_u",
- "aaf_password": "test_p"
- },
- {"name" : "test_n2",
- "location" : "test_l",
- "client_role" : "test_cr",
- "type" : "message_router",
- "config_key" : "test_c",
- "aaf_username": "test_u",
- "aaf_password": "test_p"
- }
- ]
- return connections
-
-def test_validate_cons():
- #test good streams
- good_conn = _get_good_connection()
- _validate_conns(good_conn)
-
- #mutate
- nosub = _get_good_connection().pop("streams_subscribes")
- with pytest.raises(BadConnections) as excinfo:
- _validate_conns(nosub)
-
- nopub = _get_good_connection().pop("streams_publishes")
- with pytest.raises(BadConnections) as excinfo:
- _validate_conns(nopub)
-
- noloc = _get_good_connection()["streams_publishes"][0].pop("location")
- with pytest.raises(BadConnections) as excinfo:
- _validate_conns(noloc)
-
-def test_nonr_dec():
- def blow():
- d = {}
- d["emptyinside"] += 1
- return d
- #apply decorator
- blow = try_raise_nonr(blow)
- with pytest.raises(NonRecoverableError):
- blow()
-
- def work():
- return 666
- work = try_raise_nonr(work)
- assert work() == 666
-
diff --git a/cdap/cdapplugin/tests/test_discovery.py b/cdap/cdapplugin/tests/test_discovery.py
deleted file mode 100644
index 7354f4e..0000000
--- a/cdap/cdapplugin/tests/test_discovery.py
+++ /dev/null
@@ -1,114 +0,0 @@
-# org.onap.dcae
-# ================================================================================
-# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-
-from cdapcloudify import get_module_logger
-from cdapcloudify import discovery
-import pytest
-import requests
-import collections
-import json
-
-logger = get_module_logger(__name__)
-
-_TEST_BROKER_NAME = "test_broker"
-_TEST_SCN = "test_scn"
-
-
-class FakeResponse:
- def __init__(self, status_code, text, json = {}):
- self.status_code = status_code
- self.json = json #this is kind of misleading as the broker doesnt return the input as output but this cheat makes testing easier
- self.text = text
-
-def _fake_putpost(url, json, headers):
- return FakeResponse(status_code = 200,
- json = json,
- text = "URL: {0}, headers {1}".format(url, headers))
-
-def _fake_delete(url):
- return FakeResponse(status_code = 200, text = "URL: {0}".format(url))
-
-def _fake_get_broker_url(cdap_broker_name, service_component_name, logger):
- return "http://{ip}:{port}/application/{appname}".format(ip="666.666.666.666", port="666", appname=service_component_name)
-
-def test_put_broker(monkeypatch):
- monkeypatch.setattr('requests.put', _fake_putpost)
- monkeypatch.setattr('cdapcloudify.discovery._get_broker_url', _fake_get_broker_url)
- R = discovery.put_broker(
- _TEST_BROKER_NAME,
- _TEST_SCN,
- "test_ns",
- "test_sn",
- "test_ju",
- "test_an",
- "test_av",
- "test_ac",
- "test_ap",
- "test_se",
- "test_p",
- "test_pp",
- logger = logger)
-
- assert R.text == "URL: http://666.666.666.666:666/application/test_scn, headers {'content-type': 'application/json'}"
- assert R.json == {'app_preferences': 'test_ap', 'services': 'test_se', 'namespace': 'test_ns', 'programs': 'test_p', 'cdap_application_type': 'program-flowlet', 'app_config': 'test_ac', 'streamname': 'test_sn', 'program_preferences': 'test_pp', 'artifact_name': 'test_an', 'jar_url': 'test_ju', 'artifact_version': 'test_av'}
- assert R.status_code == 200
-
-def test_reconfigure_in_broker(monkeypatch):
- monkeypatch.setattr('requests.put', _fake_putpost)
- monkeypatch.setattr('cdapcloudify.discovery._get_broker_url', _fake_get_broker_url)
- R = discovery.reconfigure_in_broker(
- _TEST_BROKER_NAME,
- _TEST_SCN,
- {"redome" : "baby"},
- "program-flowlet-app-config",
- logger = logger)
- assert R.text == "URL: http://666.666.666.666:666/application/test_scn/reconfigure, headers {'content-type': 'application/json'}"
- assert R.json == {'reconfiguration_type': 'program-flowlet-app-config', 'config': {'redome': 'baby'}}
- assert R.status_code == 200
-
-def test_delete_on_broker(monkeypatch):
- monkeypatch.setattr('requests.delete', _fake_delete)
- monkeypatch.setattr('cdapcloudify.discovery._get_broker_url', _fake_get_broker_url)
- R = discovery.delete_on_broker(
- _TEST_BROKER_NAME,
- _TEST_SCN,
- logger = logger)
- assert R.text == "URL: http://666.666.666.666:666/application/test_scn"
- assert R.status_code == 200
-
-def test_multi_delete(monkeypatch):
- pretend_appnames = ['yo1', 'yo2']
-
- def fake_get(url):
- #return a fake list of app names
- return FakeResponse(status_code = 200,
- text = json.dumps(pretend_appnames))
- def fake_get_connection_info_from_consul(broker_name, logger):
- return "666.666.666.666", "666"
-
- monkeypatch.setattr('requests.get', fake_get)
- monkeypatch.setattr('cdapcloudify.discovery._get_connection_info_from_consul', fake_get_connection_info_from_consul)
- monkeypatch.setattr('requests.post', _fake_putpost)
- R = discovery.delete_all_registered_apps(
- _TEST_BROKER_NAME,
- logger = logger)
-
- assert R.text == "URL: http://666.666.666.666:666/application/delete, headers {'content-type': 'application/json'}"
- assert R.status_code == 200
- assert R.json == {'appnames': pretend_appnames}
diff --git a/cdap/cdapplugin/tox-local.ini b/cdap/cdapplugin/tox-local.ini
deleted file mode 100644
index d14c8a1..0000000
--- a/cdap/cdapplugin/tox-local.ini
+++ /dev/null
@@ -1,30 +0,0 @@
-# tox -c tox-local.ini
-[tox]
-envlist = py27,py36,cov
-
-[testenv]
-# coverage can only find modules if pythonpath is set
-setenv=
- PYTHONPATH={toxinidir}
- COVERAGE_FILE=.coverage.{envname}
-deps=
- -rrequirements.txt
- pytest
- coverage
- pytest-cov
-commands=
- coverage erase
- pytest --junitxml xunit-results.{envname}.xml --cov cdapcloudify
-
-[testenv:cov]
-skip_install = true
-deps=
- coverage
-setenv=
- COVERAGE_FILE=.coverage
-commands=
- coverage combine
- coverage html
-
-[pytest]
-junit_family = xunit2
diff --git a/cdap/cdapplugin/tox.ini b/cdap/cdapplugin/tox.ini
deleted file mode 100644
index 5c399a7..0000000
--- a/cdap/cdapplugin/tox.ini
+++ /dev/null
@@ -1,29 +0,0 @@
-[tox]
-envlist = py27,py36,cov
-
-[testenv]
-# coverage can only find modules if pythonpath is set
-setenv=
- PYTHONPATH={toxinidir}
- COVERAGE_FILE=.coverage.{envname}
-deps=
- -rrequirements.txt
- pytest
- coverage
- pytest-cov
-commands=
- coverage erase
- pytest --junitxml xunit-results.{envname}.xml --cov cdapcloudify
-
-[testenv:cov]
-skip_install = true
-deps=
- coverage
-setenv=
- COVERAGE_FILE=.coverage
-commands=
- coverage combine
- coverage xml
-
-[pytest]
-junit_family = xunit2
diff --git a/cdap/demo_blueprints/cdap_hello_world.yaml b/cdap/demo_blueprints/cdap_hello_world.yaml
deleted file mode 100644
index e154cf7..0000000
--- a/cdap/demo_blueprints/cdap_hello_world.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-# ================================================================================
-# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-tosca_definitions_version: cloudify_dsl_1_3
-
-imports:
- - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/cdap/14.2.5/cdap_types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/dcaepolicy/1.0.0/node-type.yaml
-
-inputs:
- hello_world_jar_url:
- type: string
- connected_broker_dns_name:
- type: string
- default : "cdap_broker"
-
-node_templates:
- hw_app_policy_test:
- type: dcae.nodes.policy
- properties:
- policy_id : DCAE_alex.Config_test_cdap_policy
-
- hw_cdap_app:
- type: dcae.nodes.MicroService.cdap
- properties:
- service_component_type:
- 'hello_world'
- jar_url: { get_input : hello_world_jar_url }
- artifact_name: "HelloWorld"
- artifact_version: "3.4.3"
- namespace: "cloudifyhwtest"
- programs:
- [{"program_type" : "flows", "program_id" : "WhoFlow"}, {"program_type" : "services", "program_id" : "Greeting"}]
- streamname:
- 'who'
- service_endpoints:
- [{"service_name" : "Greeting", "service_endpoint" : "greet", "endpoint_method" : "GET"}]
- app_config: {"foo" : "you should never see this; it should be overwritten by policy"}
- app_preferences: {"foo_updated" : "you should never see this; it should be overwritten by policy"}
-
- interfaces:
- cloudify.interfaces.lifecycle:
- create:
- inputs:
- connected_broker_dns_name: { get_input: connected_broker_dns_name }
- relationships:
- - target: hw_app_policy_test
- type: cloudify.relationships.depends_on
-
-outputs:
- hw_cdap_app_name:
- value:
- {get_attribute:[hw_cdap_app, service_component_name]}
diff --git a/cdap/demo_blueprints/cdap_hello_world_reconfigure.sh b/cdap/demo_blueprints/cdap_hello_world_reconfigure.sh
deleted file mode 100755
index 7731160..0000000
--- a/cdap/demo_blueprints/cdap_hello_world_reconfigure.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-# ================================================================================
-# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-#!/bin/bash
-cfy executions start -d cdap_hello_world -w execute_operation -p '{"operation" : "reconfiguration.app_config_reconfigure", "node_ids" : ["hw_cdap_app"], "operation_kwargs" : {"new_config_template" : {"foo":"bar-manual-update"}}, "allow_kwargs_override": true}'
-cfy executions start -d cdap_hello_world -w execute_operation -p '{"operation" : "reconfiguration.app_preferences_reconfigure", "node_ids" : ["hw_cdap_app"], "operation_kwargs" : {"new_config_template" : {"foo_updated":"foo-pref-manual-update"}}, "allow_kwargs_override": true}'
-cfy executions start -d cdap_hello_world -w execute_operation -p '{"operation" : "reconfiguration.app_smart_reconfigure", "node_ids" : ["hw_cdap_app"], "operation_kwargs" : {"new_config_template" : {"foo_updated":"SO SMARTTTTTT", "foo":"SO SMART AGAINNNNN"}}, "allow_kwargs_override": true}'
diff --git a/cdap/demo_blueprints/cdap_hello_world_with_dmaap.yaml b/cdap/demo_blueprints/cdap_hello_world_with_dmaap.yaml
deleted file mode 100644
index 11c6f75..0000000
--- a/cdap/demo_blueprints/cdap_hello_world_with_dmaap.yaml
+++ /dev/null
@@ -1,165 +0,0 @@
-# ================================================================================
-# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-tosca_definitions_version: cloudify_dsl_1_3
-
-imports:
- - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/dmaap/1.1.0/dmaap.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/cdap/14.2.5/cdap_types.yaml
-
-inputs:
- hello_world_jar_url:
- type: string
- connected_broker_dns_name:
- type: string
- default : "cdap_broker"
-
- #aaf inputs
- client_role:
- type: string
- topic00fqtn:
- type: string
- topic01fqtn:
- type: string
- aafu0:
- type: string
- default: "foo0"
- aafp0:
- type: string
- default: "bar0"
- aafu1:
- type: string
- default : "foo1"
- aafp1:
- type: string
- default : "bar1"
- aafu2:
- type: string
- default: "foo2"
- aafp2:
- type: string
- default: "bar2"
- aafu3:
- type: string
- default : "foo3"
- aafp3:
- type: string
- default : "bar3"
-
-node_templates:
- topic00:
- type: dcae.nodes.ExistingTopic
- properties:
- fqtn: { get_input : topic00fqtn }
- topic01:
- type: dcae.nodes.ExistingTopic
- properties:
- fqtn: { get_input : topic01fqtn }
- feed00:
- type: dcae.nodes.Feed
- properties:
- feed_name: "FEEDME-12"
- feed_description: "Tommy Test feed for CDAP Publishes"
- feed_version: 6.6.6
- aspr_classification: "unclassified"
-
- hw_cdap_app:
- type: dcae.nodes.MicroService.cdap
- properties:
- service_component_type: 'hello_world'
- jar_url: { get_input : hello_world_jar_url }
- artifact_name: "HelloWorld"
- artifact_version: "3.4.3"
- namespace: "cloudifyhwtest"
- programs:
- [{"program_type" : "flows", "program_id" : "WhoFlow"}, {"program_type" : "services", "program_id" : "Greeting"}]
- streamname:
- 'who'
- service_endpoints:
- [{"service_name" : "Greeting", "service_endpoint" : "greet", "endpoint_method" : "GET"}]
-
- #special key for CDAP plugin
- connections:
- streams_publishes:
- - name: topic00 #MR pub 1
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey0"
- aaf_username: { get_input: aafu0 }
- aaf_password: { get_input: aafp0 }
- - name: topic01 #MR pub 2
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey1"
- aaf_username: { get_input: aafu1 }
- aaf_password: { get_input: aafp1 }
- - name: feed00 #Feed pub 1
- location: mtc5
- type: data_router
- config_key: "mydrconfigkey"
- streams_subscribes:
- - name: topic00 #MEANT FOR DEMO ONLY! Subscribing and publishing to same topic. Not real example.
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey2"
- aaf_username: { get_input: aafu2 }
- aaf_password: { get_input: aafp2 }
- - name: topic01
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey3"
- aaf_username: { get_input: aafu3 }
- aaf_password: { get_input: aafp3 }
-
- relationships:
- - type: dcae.relationships.publish_events
- target: topic00 #MEANT FOR DEMO ONLY! Subscribing and publishing to same topic. Not real example.
- - type: dcae.relationships.publish_events
- target: topic01
- - type: dcae.relationships.subscribe_to_events
- target: topic00
- - type: dcae.relationships.subscribe_to_events
- target: topic01
- - type: dcae.relationships.publish_files
- target: feed00
-
- interfaces:
- cloudify.interfaces.lifecycle:
- create:
- inputs:
- connected_broker_dns_name: { get_input: connected_broker_dns_name }
-
-outputs:
- hw_cdap_app_name:
- value: {get_attribute:[hw_cdap_app, service_component_name]}
-
- topic00_data:
- description: "Topic 00 data"
- value: { get_attribute: [hw_cdap_app, topic00]}
-
- topic01_data:
- description: "Topic 01 data"
- value: { get_attribute: [hw_cdap_app, topic01]}
-
-
-
-
diff --git a/cdap/demo_blueprints/cdap_hello_world_with_laika.yaml b/cdap/demo_blueprints/cdap_hello_world_with_laika.yaml
deleted file mode 100644
index fc84f8b..0000000
--- a/cdap/demo_blueprints/cdap_hello_world_with_laika.yaml
+++ /dev/null
@@ -1,97 +0,0 @@
-# ================================================================================
-# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-tosca_definitions_version: cloudify_dsl_1_3
-
-imports:
- - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/cdap/14.2.5/cdap_types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/docker/2.3.0/node-type.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/relationship/1.0.0/node-type.yaml
-
-inputs:
- hello_world_jar_url:
- type: string
- laika_image:
- type: string
- connected_broker_dns_name:
- type: string
- default : "cdap_broker"
-
-node_templates:
-
- hw_cdap_app:
- type: dcae.nodes.MicroService.cdap
- properties:
- service_component_type:
- 'hello_world'
- jar_url: { get_input : hello_world_jar_url }
- artifact_name: "HelloWorld"
- artifact_version: "3.4.3"
- namespace: "cloudifyhwtest"
- programs:
- [{"program_type" : "flows", "program_id" : "WhoFlow"}, {"program_type" : "services", "program_id" : "Greeting"}]
- streamname:
- 'who'
- service_endpoints:
- [{"service_name" : "Greeting", "service_endpoint" : "greet", "endpoint_method" : "GET"}]
-
- connections:
- services_calls:
- - service_component_type: laika
- config_key: "laika_handle"
-
- relationships:
- - type: dcae.relationships.component_connected_to
- target: laika-one
-
- interfaces:
- cloudify.interfaces.lifecycle:
- create:
- inputs:
- connected_broker_dns_name: { get_input: connected_broker_dns_name }
-
- laika-one:
- type: dcae.nodes.DockerContainerForComponents
- properties:
- service_component_type: 'laika'
- service_id: 'this_is_dumb'
- location_id: 'this_is_dumb'
- image: { get_input : laika_image }
- # Trying without health check
- relationships:
- - type: dcae.relationships.component_contained_in
- target: docker_host
- interfaces:
- cloudify.interfaces.lifecycle:
- stop:
- inputs:
- cleanup_image:
- False
-
- docker_host:
- type: dcae.nodes.SelectedDockerHost
- properties:
- location_id: 'this is dumb'
- docker_host_override: 'platform_dockerhost'
-
-outputs:
- hw_cdap_app_name:
- value: {get_attribute:[hw_cdap_app, service_component_name]}
-
-
-
diff --git a/cdap/demo_blueprints/cdap_hello_world_with_mr.yaml b/cdap/demo_blueprints/cdap_hello_world_with_mr.yaml
deleted file mode 100644
index f52edad..0000000
--- a/cdap/demo_blueprints/cdap_hello_world_with_mr.yaml
+++ /dev/null
@@ -1,151 +0,0 @@
-# ================================================================================
-# Copyright (c) 2017-2018 AT&T Intellectual Property. All rights reserved.
-# ================================================================================
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ============LICENSE_END=========================================================
-#
-# ECOMP is a trademark and service mark of AT&T Intellectual Property.
-tosca_definitions_version: cloudify_dsl_1_3
-
-imports:
- - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/cdap/14.2.5/cdap_types.yaml
- - {{ ONAPTEMPLATE_RAWREPOURL_org_onap_dcaegen2 }}/type_files/dmaap/1.1.0/dmaap.yaml
-
-inputs:
- hello_world_jar_url:
- type: string
- connected_broker_dns_name:
- type: string
- default : "cdap_broker"
-
- #aaf inputs
- client_role:
- type: string
- topic00fqtn:
- type: string
- topic01fqtn:
- type: string
- aafu0:
- type: string
- default: "foo0"
- aafp0:
- type: string
- default: "bar0"
- aafu1:
- type: string
- default : "foo1"
- aafp1:
- type: string
- default : "bar1"
- aafu2:
- type: string
- default: "foo2"
- aafp2:
- type: string
- default: "bar2"
- aafu3:
- type: string
- default : "foo3"
- aafp3:
- type: string
- default : "bar3"
-
-node_templates:
- topic00:
- type: dcae.nodes.ExistingTopic
- properties:
- fqtn: { get_input : topic00fqtn }
-
- topic01:
- type: dcae.nodes.ExistingTopic
- properties:
- fqtn: { get_input : topic01fqtn }
-
- hw_cdap_app:
- type: dcae.nodes.MicroService.cdap
- properties:
- service_component_type:
- 'hello_world'
- jar_url: { get_input : hello_world_jar_url }
- artifact_name: "HelloWorld"
- artifact_version: "3.4.3"
- namespace: "cloudifyhwtest"
- programs:
- [{"program_type" : "flows", "program_id" : "WhoFlow"}, {"program_type" : "services", "program_id" : "Greeting"}]
- streamname:
- 'who'
- service_endpoints:
- [{"service_name" : "Greeting", "service_endpoint" : "greet", "endpoint_method" : "GET"}]
-
- #special key for CDAP plugin
- connections:
- streams_publishes:
- - name: topic00 #MR pub 1
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey0"
- aaf_username: { get_input: aafu0 }
- aaf_password: { get_input: aafp0 }
- - name: topic01 #MR pub 2
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey1"
- aaf_username: { get_input: aafu1 }
- aaf_password: { get_input: aafp1 }
- streams_subscribes:
- - name: topic00 #MEANT FOR DEMO ONLY! Subscribing and publishing to same topic. Not real example.
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey2"
- aaf_username: { get_input: aafu2 }
- aaf_password: { get_input: aafp2 }
- - name: topic01
- location: mtc5
- client_role: { get_input: client_role }
- type: message_router
- config_key: "myconfigkey3"
- aaf_username: { get_input: aafu3 }
- aaf_password: { get_input: aafp3 }
-
- relationships:
- - type: dcae.relationships.publish_events
- target: topic00 #MEANT FOR DEMO ONLY! Subscribing and publishing to same topic. Not real example.
- - type: dcae.relationships.publish_events
- target: topic01
- - type: dcae.relationships.subscribe_to_events
- target: topic00
- - type: dcae.relationships.subscribe_to_events
- target: topic01
-
- interfaces:
- cloudify.interfaces.lifecycle:
- create:
- inputs:
- connected_broker_dns_name: { get_input: connected_broker_dns_name }
-
-outputs:
- hw_cdap_app_name:
- value: {get_attribute:[hw_cdap_app, service_component_name]}
-
- topic00_data:
- description: "Topic 00 data"
- value: { get_attribute: [hw_cdap_app, topic00]}
-
- topic01_data:
- description: "Topic 01 data"
- value: { get_attribute: [hw_cdap_app, topic01]}
-
diff --git a/cdap/pom.xml b/cdap/pom.xml
deleted file mode 100644
index 6c34227..0000000
--- a/cdap/pom.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0"?>
-<!--
-================================================================================
-Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
-================================================================================
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-============LICENSE_END=========================================================
-
-ECOMP is a trademark and service mark of AT&T Intellectual Property.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.onap.dcaegen2.platform</groupId>
- <artifactId>plugins</artifactId>
- <version>1.2.0-SNAPSHOT</version>
- </parent>
- <groupId>org.onap.dcaegen2.platform.plugins</groupId>
- <artifactId>cdap</artifactId>
- <name>cdap-plugin</name>
- <version>1.2.0-SNAPSHOT</version>
- <url>http://maven.apache.org</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <sonar.sources>.</sonar.sources>
- <sonar.modules>cdapplugin</sonar.modules>
- <cdapplugin.sonar.junit.reportsPath>xunit-results.xml</cdapplugin.sonar.junit.reportsPath>
- <cdapplugin.sonar.python.coverage.reportPath>coverage.xml</cdapplugin.sonar.python.coverage.reportPath>
- <sonar.language>py</sonar.language>
- <sonar.pluginname>Python</sonar.pluginname>
- <cdapplugin.sonar.inclusions>**/*.py</cdapplugin.sonar.inclusions>
- <cdapplugin.sonar.exclusions>tests/*,setup.py</cdapplugin.sonar.exclusions>
- </properties>
- <build>
- <finalName>${project.artifactId}-${project.version}</finalName>
- <plugins>
- <!-- plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <version>2.4.1</version>
- <configuration>
- <descriptors>
- <descriptor>assembly/dep.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin -->
- <!-- now we configure custom action (calling a script) at various lifecycle phases -->
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>exec-maven-plugin</artifactId>
- <version>1.2.1</version>
- <executions>
- <execution>
- <id>clean phase script</id>
- <phase>clean</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>clean</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>generate-sources script</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>generate-sources</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>compile script</id>
- <phase>compile</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>compile</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>package script</id>
- <phase>package</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>package</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>test script</id>
- <phase>test</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>test</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>install script</id>
- <phase>install</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>install</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>deploy script</id>
- <phase>deploy</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <arguments>
- <argument>${project.artifactId}</argument>
- <argument>deploy</argument>
- </arguments>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-</project>