def create_topic(**kwargs): ''' Creates a message router topic. Allows 'topic_name', 'topic_description', 'txenable', 'replication_case', 'global_mr_url', and 'useExisting' as optional node properties. If 'topic_name' is not set, generates a random one. Sets 'fqtn' in the instance runtime_properties. Note that 'txenable' is a Message Router flag indicating whether transactions are enabled on the topic. Note that 'useExisting' is a flag indicating whether DBCL will use existing topic if the topic already exists. ''' try: # Make sure there's a topic_name if "topic_name" in ctx.node.properties: topic_name = ctx.node.properties["topic_name"] if topic_name == '' or topic_name.isspace(): topic_name = random_string(12) else: topic_name = random_string(12) # Make sure there's a topic description if "topic_description" in ctx.node.properties: topic_description = ctx.node.properties["topic_description"] else: topic_description = "No description provided" # ..and the truly optional setting if "txenable" in ctx.node.properties: txenable = ctx.node.properties["txenable"] else: txenable = False if "replication_case" in ctx.node.properties: replication_case = ctx.node.properties["replication_case"] else: replication_case = None if "global_mr_url" in ctx.node.properties: global_mr_url = ctx.node.properties["global_mr_url"] else: global_mr_url = None if "useExisting" in ctx.node.properties: useExisting = ctx.node.properties["useExisting"] else: useExisting = False # Make the request to the controller dmc = DMaaPControllerHandle(DMAAP_API_URL, DMAAP_USER, DMAAP_PASS, ctx.logger) ctx.logger.info( "Attempting to create topic name {0}".format(topic_name)) t = dmc.create_topic(topic_name, topic_description, txenable, DMAAP_OWNER, replication_case, global_mr_url, useExisting) t.raise_for_status() # Capture important properties from the result topic = t.json() ctx.instance.runtime_properties["fqtn"] = topic["fqtn"] except Exception as e: ctx.logger.error("Error creating topic: {er}".format(er=e)) raise NonRecoverableError(e)
def test_dmaapc(monkeypatch, mockconsul, mockdmaapbc): from dmaapplugin.dmaaputils import random_string config = mockconsul().get_config('mockkey')['dmaap'] DMAAP_API_URL = config['url'] DMAAP_USER = config['username'] DMAAP_PASS = config['password'] DMAAP_OWNER = config['owner'] properties = {'fqdn': 'a.x.example.com', 'openstack': _goodosv2} mock_ctx = MockCloudifyContext(node_id='test_node_id', node_name='test_node_name', properties=properties, runtime_properties={ "admin": { "user": "******" }, "user": { "user": "******" }, "viewer": { "user": "******" } }) current_ctx.set(mock_ctx) kwargs = { "topic_name": "ONAP_test", "topic_description": "onap dmaap plugin unit test topic" } # Make sure there's a topic_name if "topic_name" in ctx.node.properties: topic_name = ctx.node.properties["topic_name"] if topic_name == '' or topic_name.isspace(): topic_name = random_string(12) else: topic_name = random_string(12) # Make sure there's a topic description if "topic_description" in ctx.node.properties: topic_description = ctx.node.properties["topic_description"] else: topic_description = "No description provided" # ..and the truly optional setting if "txenable" in ctx.node.properties: txenable = ctx.node.properties["txenable"] else: txenable = False if "replication_case" in ctx.node.properties: replication_case = ctx.node.properties["replication_case"] else: replication_case = None if "global_mr_url" in ctx.node.properties: global_mr_url = ctx.node.properties["global_mr_url"] else: global_mr_url = None dmc = DMaaPControllerHandle(DMAAP_API_URL, DMAAP_USER, DMAAP_PASS, ctx.logger) ctx.logger.info("Attempting to create topic name {0}".format(topic_name)) t = dmc.create_topic(topic_name, topic_description, txenable, DMAAP_OWNER, replication_case, global_mr_url) # Capture important properties from the result topic = t.json() ctx.instance.runtime_properties["fqtn"] = topic["fqtn"] # test DMaaPControllerHandle functions path = "myPath" url = dmc._make_url(path) rc = dmc._get_resource(path) rc = dmc._create_resource(path, None) rc = dmc._delete_resource(path)