Added policyNodes, db, tls support 22/101422/4
authorDhrumin Desai <dd303q@att.com>
Thu, 6 Feb 2020 19:26:41 +0000 (14:26 -0500)
committerDhrumin Desai <dd303q@att.com>
Wed, 19 Feb 2020 17:18:30 +0000 (12:18 -0500)
Change-Id: Id960c156eb8da67e6792c6dbc1a60892d28703b0
Issue-ID: DCAEGEN2-164
Issue-ID: DCAEGEN2-1873
Issue-ID: DCAEGEN2-1995
Issue-ID: DCAEGEN2-1859
Signed-off-by: Dhrumin Desai <dd303q@att.com>
33 files changed:
mod/bpgenerator/TestCases/helloworld/blueprint/helloworld_changed_with_dmaap.yaml [new file with mode: 0644]
mod/bpgenerator/TestCases/helloworld/blueprint/helloworld_changed_without_dmaap_yaml.yaml [new file with mode: 0644]
mod/bpgenerator/TestCases/helloworld/compspec/hello-changed.json [new file with mode: 0644]
mod/bpgenerator/TestCases/ves/blueprints/ves-no-change_yaml.yaml [new file with mode: 0644]
mod/bpgenerator/TestCases/ves/blueprints/ves-with-dmaap_yaml.yaml [new file with mode: 0644]
mod/bpgenerator/TestCases/ves/componentSpecs/ves.json [new file with mode: 0644]
mod/bpgenerator/TestCases/ves/inputFiles/ves_nodmaap.json [new file with mode: 0644]
mod/bpgenerator/pom.xml
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/Fixes.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/PgaasNodeBuilder.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/PolicyNodeBuilder.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/exception/DatabasesNotFoundException.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/GetAttribute.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/Appconfig.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/Blueprint.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/DmaapObj.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/Properties.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/StartInputs.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/TlsInfo.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/pgaas/PgaasNode.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/pgaas/PgaasNodeProperties.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/policy/PolicyNode.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/policy/PolicyNodeProperties.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/Auxilary.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/ComponentSpec.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/policy_info/PolicyInfo.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/policy_info/TypePolicy.java [new file with mode: 0644]
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/dmaapbp/DmaapBlueprint.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/dmaapbp/DmaapNode.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/dmaapbp/DmaapStreams.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/onapbp/OnapBlueprint.java
mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/onapbp/OnapNode.java
mod/bpgenerator/version.properties

diff --git a/mod/bpgenerator/TestCases/helloworld/blueprint/helloworld_changed_with_dmaap.yaml b/mod/bpgenerator/TestCases/helloworld/blueprint/helloworld_changed_with_dmaap.yaml
new file mode 100644 (file)
index 0000000..95961ee
--- /dev/null
@@ -0,0 +1,376 @@
+#  ============LICENSE_START=======================================================
+#    org.onap.dcae
+#    ================================================================================
+#    Copyright (c) 2019-2020 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=========================================================
+#
+#description: Hello World mS for subscribing the data from local DMaaP, DR or MR, processing them and publishing them as PM files to local DMaaP DR
+#blueprint_version: 1.0.1
+---
+tosca_definitions_version: cloudify_dsl_1_3
+description: Hello World mS for subscribing the data from local DMaaP, DR or MR, processing
+  them and publishing them as PM files to local DMaaP DR
+imports:
+- https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/k8splugin/1.7.1/k8splugin_types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.ccsdk.platform.plugins/type_files/dmaap/dmaap.yaml
+inputs:
+  DCAE-HELLO-WORLD-PUB-DR_DCAE-HELLO-WORLD-PUB-DR_feed_location:
+    type: string
+  DCAE-HELLO-WORLD-PUB-DR_feed_name:
+    type: string
+  DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_aaf_password:
+    type: string
+  DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_aaf_username:
+    type: string
+  DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_client_role:
+    type: string
+  DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_location:
+    type: string
+  DCAE-HELLO-WORLD-PUB-MR_topic_name:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_decompress:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_location:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_password:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_priviliged:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_username:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_feed_name:
+    type: string
+  DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_aaf_password:
+    type: string
+  DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_aaf_username:
+    type: string
+  DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_client_role:
+    type: string
+  DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_location:
+    type: string
+  DCAE-HELLO-WORLD-SUB-MR_topic_name:
+    type: string
+  dcae.collectors.vcc.helloworld.pm_cpu_limit:
+    type: string
+    default: "250m"
+  dcae.collectors.vcc.helloworld.pm_cpu_request:
+    type: string
+    default: "250m"
+  dcae.collectors.vcc.helloworld.pm_memory_limit:
+    type: string
+    default: "128Mi"
+  dcae.collectors.vcc.helloworld.pm_memory_request:
+    type: string
+    default: "128Mi"
+  dcaes_database_name:
+    type: string
+    description: db name
+    default: ""
+  dcaes_database_writerfqdn:
+    type: string
+    description: db writerfqdn
+    default: ""
+  dti_database_name:
+    type: string
+    description: db name
+    default: ""
+  dti_database_writerfqdn:
+    type: string
+    description: db writerfqdn
+    default: ""
+  envs:
+    default: &envs {}
+  replicas:
+    type: integer
+    description: number of instances
+    default: 1
+  repo_database_name:
+    type: string
+    description: db name
+    default: ""
+  repo_database_writerfqdn:
+    type: string
+    description: db writerfqdn
+    default: ""
+  service_component_name_override:
+    type: string
+    default: ""
+  tag_version:
+    type: string
+    default: "nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+  tca_policy_00_policy_id:
+    type: string
+    description: policy_id
+    default: ""
+  tca_policy_11_policy_id:
+    type: string
+    description: policy_id
+    default: "tca_policy_id_11"
+  use_tls:
+    type: boolean
+    description: flag to indicate tls enable/disable
+    default: true
+  vcc_hello_name:
+    type: string
+    default: "fsdfa"
+node_templates:
+  DCAE-HELLO-WORLD-PUB-DR_feed:
+    type: ccsdk.nodes.Feed
+    properties:
+      feed_name:
+        get_input: DCAE-HELLO-WORLD-PUB-DR_feed_name
+  DCAE-HELLO-WORLD-PUB-MR_topic:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: DCAE-HELLO-WORLD-PUB-MR_topic_name
+  DCAE-HELLO-WORLD-SUB-DR_feed:
+    type: ccsdk.nodes.Feed
+    properties:
+      feed_name:
+        get_input: DCAE-HELLO-WORLD-SUB-DR_feed_name
+  DCAE-HELLO-WORLD-SUB-MR_topic:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: DCAE-HELLO-WORLD-SUB-MR_topic_name
+  dcae.collectors.vcc.helloworld.pm:
+    type: dcae.nodes.ContainerizedServiceComponentUsingDmaap
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        start:
+          inputs:
+            ports: []
+            envs:
+              <<: *envs
+              DCAES_DB_NAME:
+                get_input: dcaes_database_name
+              DCAES_DB_ADMIN_HOST:
+                get_attribute:
+                - dcaes_pgaasdb
+                - admin
+                - host
+              DCAES_DB_ADMIN_USER:
+                get_attribute:
+                - dcaes_pgaasdb
+                - admin
+                - user
+              DCAES_DB_ADMIN_PASS:
+                get_attribute:
+                - dcaes_pgaasdb
+                - admin
+                - password
+              DTI_DB_NAME:
+                get_input: dti_database_name
+              DTI_DB_ADMIN_HOST:
+                get_attribute:
+                - dti_pgaasdb
+                - admin
+                - host
+              DTI_DB_ADMIN_USER:
+                get_attribute:
+                - dti_pgaasdb
+                - admin
+                - user
+              DTI_DB_ADMIN_PASS:
+                get_attribute:
+                - dti_pgaasdb
+                - admin
+                - password
+              REPO_DB_NAME:
+                get_input: repo_database_name
+              REPO_DB_ADMIN_HOST:
+                get_attribute:
+                - repo_pgaasdb
+                - admin
+                - host
+              REPO_DB_ADMIN_USER:
+                get_attribute:
+                - repo_pgaasdb
+                - admin
+                - user
+              REPO_DB_ADMIN_PASS:
+                get_attribute:
+                - repo_pgaasdb
+                - admin
+                - password
+    properties:
+      application_config:
+        service_calls: []
+        streams_publishes:
+          DCAE-HELLO-WORLD-PUB-DR:
+            dmaap_info: <<DCAE-HELLO-WORLD-PUB-DR_feed>>
+            type: data_router
+          DCAE-HELLO-WORLD-PUB-MR:
+            dmaap_info: <<DCAE-HELLO-WORLD-PUB-MR_topic>>
+            type: message_router
+            pass:
+              get_input: DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_aaf_password
+            user:
+              get_input: DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_aaf_username
+        streams_subscribes:
+          DCAE-HELLO-WORLD-SUB-DR:
+            dmaap_info: <<DCAE-HELLO-WORLD-SUB-DR_feed>>
+            type: data_router
+          DCAE-HELLO-WORLD-SUB-MR:
+            dmaap_info: <<DCAE-HELLO-WORLD-SUB-MR_topic>>
+            type: message_router
+            pass:
+              get_input: DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_aaf_password
+            user:
+              get_input: DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_aaf_username
+        isSelfServeComponent: false
+        service_component_name_override:
+          get_input: service_component_name_override
+        useDtiConfig: false
+        vcc_hello_name:
+          get_input: vcc_hello_name
+      docker_config:
+        healthcheck:
+          interval: 60s
+          timeout: 20s
+          script: /opt/app/vcc/bin/common/HealthCheck_HelloWorld.sh
+          type: docker
+        volumes:
+        - container:
+            bind: /opt/app/dcae-certificate
+          host:
+            path: /opt/app/dcae-certificate
+        - container:
+            bind: /opt/logs/DCAE/dmd/AGENT
+          host:
+            path: /opt/logs/DCAE/helloworldpm/dmd/AGENT
+        - container:
+            bind: /opt/logs/DCAE/dmd/WATCHER
+          host:
+            path: /opt/logs/DCAE/helloworldpm/dmd/WATCHER
+        - container:
+            bind: /opt/app/vcc/logs/DCAE
+          host:
+            path: /opt/logs/DCAE/helloworldpm/vcc-logs
+        - container:
+            bind: /opt/app/vcc/archive/data
+          host:
+            path: /opt/data/DCAE/helloworldpm/vcc-archive
+      image:
+        get_input: tag_version
+      service_component_type: dcae-collectors-vcc-helloworld-pm
+      log_info:
+        log_directory: /opt/app/VESCollector/logs/ecomp
+      replicas:
+        get_input: replicas
+      streams_publishes:
+      - name: DCAE-HELLO-WORLD-PUB-DR_feed
+        location:
+          get_input: DCAE-HELLO-WORLD-PUB-DR_DCAE-HELLO-WORLD-PUB-DR_feed_location
+        type: data_router
+      - name: DCAE-HELLO-WORLD-PUB-MR_topic
+        location:
+          get_input: DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_location
+        client_role:
+          get_input: DCAE-HELLO-WORLD-PUB-MR_DCAE-HELLO-WORLD-PUB-MR_topic_client_role
+        type: message_router
+      streams_subscribes:
+      - name: DCAE-HELLO-WORLD-SUB-MR_topic
+        location:
+          get_input: DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_location
+        client_role:
+          get_input: DCAE-HELLO-WORLD-SUB-MR_DCAE-HELLO-WORLD-SUB-MR_topic_client_role
+        type: message_router
+      - name: DCAE-HELLO-WORLD-SUB-DR_feed
+        location:
+          get_input: DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_location
+        type: data_router
+        username:
+          get_input: DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_username
+        password:
+          get_input: DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_password
+        privileged:
+          get_input: DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_priviliged
+        decompress:
+          get_input: DCAE-HELLO-WORLD-SUB-DR_DCAE-HELLO-WORLD-SUB-DR_feed_decompress
+        route: /DCAE-HELLO-WORLD-SUB-DR
+        scheme: https
+      tls_info:
+        cert_directory: /opt/app/dh/etc/cert
+        use_tls:
+          get_input: use_tls
+      resource_config:
+        limits:
+          cpu:
+            get_input: dcae.collectors.vcc.helloworld.pm_cpu_limit
+          memory:
+            get_input: dcae.collectors.vcc.helloworld.pm_memory_limit
+        requests:
+          cpu:
+            get_input: dcae.collectors.vcc.helloworld.pm_cpu_request
+          memory:
+            get_input: dcae.collectors.vcc.helloworld.pm_memory_request
+    relationships:
+    - type: ccsdk.relationships.publish_files
+      target: DCAE-HELLO-WORLD-PUB-DR_feed
+    - type: ccsdk.relationships.publish_events
+      target: DCAE-HELLO-WORLD-PUB-MR_topic
+    - type: ccsdk.relationships.subscribe_to_events
+      target: DCAE-HELLO-WORLD-SUB-MR_topic
+    - type: ccsdk.relationships.subscribe_to_files
+      target: DCAE-HELLO-WORLD-SUB-DR_feed
+    - type: cloudify.relationships.depends_on
+      target: tca_policy_00
+    - type: cloudify.relationships.depends_on
+      target: tca_policy_11
+    - type: cloudify.relationships.depends_on
+      target: dcaes_pgaasdb
+    - type: cloudify.relationships.depends_on
+      target: dti_pgaasdb
+    - type: cloudify.relationships.depends_on
+      target: repo_pgaasdb
+  dcaes_pgaasdb:
+    type: dcae.nodes.pgaas.database
+    properties:
+      writerfqdn:
+        get_input: dcaes_database_writerfqdn
+      name:
+        get_input: dcaes_database_name
+      use_existing: true
+  dti_pgaasdb:
+    type: dcae.nodes.pgaas.database
+    properties:
+      writerfqdn:
+        get_input: dti_database_writerfqdn
+      name:
+        get_input: dti_database_name
+      use_existing: true
+  repo_pgaasdb:
+    type: dcae.nodes.pgaas.database
+    properties:
+      writerfqdn:
+        get_input: repo_database_writerfqdn
+      name:
+        get_input: repo_database_name
+      use_existing: true
+  tca_policy_00:
+    type: clamp.nodes.policy
+    properties:
+      policy_id:
+        get_input: tca_policy_00_policy_id
+      policy_model_id: onap.policies.monitoring.cdap.tca.hi.lo.app
+  tca_policy_11:
+    type: clamp.nodes.policy
+    properties:
+      policy_id:
+        get_input: tca_policy_11_policy_id
+      policy_model_id: onap.policies.monitoring.cdap.tca.hi.lo.app
\ No newline at end of file
diff --git a/mod/bpgenerator/TestCases/helloworld/blueprint/helloworld_changed_without_dmaap_yaml.yaml b/mod/bpgenerator/TestCases/helloworld/blueprint/helloworld_changed_without_dmaap_yaml.yaml
new file mode 100644 (file)
index 0000000..4e1f5b5
--- /dev/null
@@ -0,0 +1,330 @@
+#  ============LICENSE_START=======================================================
+#    org.onap.dcae
+#    ================================================================================
+#    Copyright (c) 2019-2020 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=========================================================
+#
+#description: Hello World mS for subscribing the data from local DMaaP, DR or MR, processing them and publishing them as PM files to local DMaaP DR
+#blueprint_version: 1.0.1
+---
+tosca_definitions_version: cloudify_dsl_1_3
+imports:
+- https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/k8splugin/1.7.1/k8splugin_types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.ccsdk.platform.plugins/type_files/dmaap/dmaap.yaml
+inputs:
+  DCAE-HELLO-WORLD-PUB-DR_delivery_url:
+    type: string
+  DCAE-HELLO-WORLD-PUB-DR_location:
+    type: string
+  DCAE-HELLO-WORLD-PUB-DR_password:
+    type: string
+  DCAE-HELLO-WORLD-PUB-DR_subscriber_id:
+    type: string
+  DCAE-HELLO-WORLD-PUB-DR_username:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_delivery_url:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_location:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_password:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_subscriber_id:
+    type: string
+  DCAE-HELLO-WORLD-SUB-DR_username:
+    type: string
+  DCAE_HELLO_WORLD_PUB_MR_publish_url:
+    type: string
+  DCAE_HELLO_WORLD_SUB_MR_subscribe_url:
+    type: string
+  always_pull_image:
+    type: boolean
+    description: Set to true if the image should always be pulled
+    default: true
+  dcae.collectors.vcc.helloworld.pm_cpu_limit:
+    type: string
+    default: "250m"
+  dcae.collectors.vcc.helloworld.pm_cpu_request:
+    type: string
+    default: "250m"
+  dcae.collectors.vcc.helloworld.pm_memory_limit:
+    type: string
+    default: "128Mi"
+  dcae.collectors.vcc.helloworld.pm_memory_request:
+    type: string
+    default: "128Mi"
+  dcaes_database_name:
+    type: string
+    description: db name
+    default: ""
+  dcaes_database_writerfqdn:
+    type: string
+    description: db writerfqdn
+    default: ""
+  dti_database_name:
+    type: string
+    description: db name
+    default: ""
+  dti_database_writerfqdn:
+    type: string
+    description: db writerfqdn
+    default: ""
+  envs:
+    default: &envs {}
+  image:
+    type: string
+    default: "nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+  location_id:
+    type: string
+    default: ""
+  replicas:
+    type: integer
+    description: number of instances
+    default: 1
+  repo_database_name:
+    type: string
+    description: db name
+    default: ""
+  repo_database_writerfqdn:
+    type: string
+    description: db writerfqdn
+    default: ""
+  service_component_name_override:
+    type: string
+    default: ""
+  tca_policy_00_policy_id:
+    type: string
+    description: policy_id
+    default: ""
+  tca_policy_11_policy_id:
+    type: string
+    description: policy_id
+    default: "tca_policy_id_11"
+  use_tls:
+    type: boolean
+    description: flag to indicate tls enable/disable
+    default: true
+  vcc_hello_name:
+    type: string
+    default: "fsdfa"
+node_templates:
+  dcae.collectors.vcc.helloworld.pm:
+    type: dcae.nodes.ContainerizedPlatformComponent
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        start:
+          inputs:
+            ports: []
+            envs:
+              <<: *envs
+              DCAES_DB_NAME:
+                get_input: dcaes_database_name
+              DCAES_DB_ADMIN_HOST:
+                get_attribute:
+                - dcaes_pgaasdb
+                - admin
+                - host
+              DCAES_DB_ADMIN_USER:
+                get_attribute:
+                - dcaes_pgaasdb
+                - admin
+                - user
+              DCAES_DB_ADMIN_PASS:
+                get_attribute:
+                - dcaes_pgaasdb
+                - admin
+                - password
+              DTI_DB_NAME:
+                get_input: dti_database_name
+              DTI_DB_ADMIN_HOST:
+                get_attribute:
+                - dti_pgaasdb
+                - admin
+                - host
+              DTI_DB_ADMIN_USER:
+                get_attribute:
+                - dti_pgaasdb
+                - admin
+                - user
+              DTI_DB_ADMIN_PASS:
+                get_attribute:
+                - dti_pgaasdb
+                - admin
+                - password
+              REPO_DB_NAME:
+                get_input: repo_database_name
+              REPO_DB_ADMIN_HOST:
+                get_attribute:
+                - repo_pgaasdb
+                - admin
+                - host
+              REPO_DB_ADMIN_USER:
+                get_attribute:
+                - repo_pgaasdb
+                - admin
+                - user
+              REPO_DB_ADMIN_PASS:
+                get_attribute:
+                - repo_pgaasdb
+                - admin
+                - password
+    properties:
+      application_config:
+        service_calls: []
+        streams_publishes:
+          DCAE-HELLO-WORLD-PUB-DR:
+            dmaap_info:
+              username:
+                get_input: DCAE-HELLO-WORLD-PUB-DR_username
+              password:
+                get_input: DCAE-HELLO-WORLD-PUB-DR_password
+              location:
+                get_input: DCAE-HELLO-WORLD-PUB-DR_location
+              delivery_url:
+                get_input: DCAE-HELLO-WORLD-PUB-DR_delivery_url
+              subscriber_id:
+                get_input: DCAE-HELLO-WORLD-PUB-DR_subscriber_id
+            type: data_router
+          DCAE-HELLO-WORLD-PUB-MR:
+            dmaap_info:
+              topic_url:
+                get_input: DCAE_HELLO_WORLD_PUB_MR_publish_url
+            type: message_router
+        streams_subscribes:
+          DCAE-HELLO-WORLD-SUB-DR:
+            dmaap_info:
+              username:
+                get_input: DCAE-HELLO-WORLD-SUB-DR_username
+              password:
+                get_input: DCAE-HELLO-WORLD-SUB-DR_password
+              location:
+                get_input: DCAE-HELLO-WORLD-SUB-DR_location
+              delivery_url:
+                get_input: DCAE-HELLO-WORLD-SUB-DR_delivery_url
+              subscriber_id:
+                get_input: DCAE-HELLO-WORLD-SUB-DR_subscriber_id
+            type: data_router
+          DCAE-HELLO-WORLD-SUB-MR:
+            dmaap_info:
+              topic_url:
+                get_input: DCAE_HELLO_WORLD_SUB_MR_subscribe_url
+            type: message_router
+        isSelfServeComponent: false
+        service_component_name_override:
+          get_input: service_component_name_override
+        useDtiConfig: false
+        vcc_hello_name:
+          get_input: vcc_hello_name
+      docker_config:
+        healthcheck:
+          interval: 60s
+          timeout: 20s
+          script: /opt/app/vcc/bin/common/HealthCheck_HelloWorld.sh
+          type: docker
+        volumes:
+        - container:
+            bind: /opt/app/dcae-certificate
+          host:
+            path: /opt/app/dcae-certificate
+        - container:
+            bind: /opt/logs/DCAE/dmd/AGENT
+          host:
+            path: /opt/logs/DCAE/helloworldpm/dmd/AGENT
+        - container:
+            bind: /opt/logs/DCAE/dmd/WATCHER
+          host:
+            path: /opt/logs/DCAE/helloworldpm/dmd/WATCHER
+        - container:
+            bind: /opt/app/vcc/logs/DCAE
+          host:
+            path: /opt/logs/DCAE/helloworldpm/vcc-logs
+        - container:
+            bind: /opt/app/vcc/archive/data
+          host:
+            path: /opt/data/DCAE/helloworldpm/vcc-archive
+      image:
+        get_input: image
+      location_id:
+        get_input: location_id
+      log_info:
+        log_directory: /opt/app/VESCollector/logs/ecomp
+      dns_name: dcae.collectors.vcc.helloworld.pm
+      replicas:
+        get_input: replicas
+      name: dcae.collectors.vcc.helloworld.pm
+      tls_info:
+        cert_directory: /opt/app/dh/etc/cert
+        use_tls:
+          get_input: use_tls
+      resource_config:
+        limits:
+          cpu:
+            get_input: dcae.collectors.vcc.helloworld.pm_cpu_limit
+          memory:
+            get_input: dcae.collectors.vcc.helloworld.pm_memory_limit
+        requests:
+          cpu:
+            get_input: dcae.collectors.vcc.helloworld.pm_cpu_request
+          memory:
+            get_input: dcae.collectors.vcc.helloworld.pm_memory_request
+      always_pull_image:
+        get_input: always_pull_image
+    relationships:
+    - type: cloudify.relationships.depends_on
+      target: tca_policy_00
+    - type: cloudify.relationships.depends_on
+      target: tca_policy_11
+    - type: cloudify.relationships.depends_on
+      target: dcaes_pgaasdb
+    - type: cloudify.relationships.depends_on
+      target: dti_pgaasdb
+    - type: cloudify.relationships.depends_on
+      target: repo_pgaasdb
+  dcaes_pgaasdb:
+    type: dcae.nodes.pgaas.database
+    properties:
+      writerfqdn:
+        get_input: dcaes_database_writerfqdn
+      name:
+        get_input: dcaes_database_name
+      use_existing: true
+  dti_pgaasdb:
+    type: dcae.nodes.pgaas.database
+    properties:
+      writerfqdn:
+        get_input: dti_database_writerfqdn
+      name:
+        get_input: dti_database_name
+      use_existing: true
+  repo_pgaasdb:
+    type: dcae.nodes.pgaas.database
+    properties:
+      writerfqdn:
+        get_input: repo_database_writerfqdn
+      name:
+        get_input: repo_database_name
+      use_existing: true
+  tca_policy_00:
+    type: clamp.nodes.policy
+    properties:
+      policy_id:
+        get_input: tca_policy_00_policy_id
+      policy_model_id: onap.policies.monitoring.cdap.tca.hi.lo.app
+  tca_policy_11:
+    type: clamp.nodes.policy
+    properties:
+      policy_id:
+        get_input: tca_policy_11_policy_id
+      policy_model_id: onap.policies.monitoring.cdap.tca.hi.lo.app
\ No newline at end of file
diff --git a/mod/bpgenerator/TestCases/helloworld/compspec/hello-changed.json b/mod/bpgenerator/TestCases/helloworld/compspec/hello-changed.json
new file mode 100644 (file)
index 0000000..24d8491
--- /dev/null
@@ -0,0 +1,154 @@
+{
+       "self": {
+               "component_type": "docker",
+               "description": "Hello World mS for subscribing the data from local DMaaP, DR or MR, processing them and publishing them as PM files to local DMaaP DR",
+               "name": "dcae.collectors.vcc.helloworld.pm",
+               "version": "1.0.1"
+       },
+       "services": {
+               "calls": [],
+               "provides": []
+       },
+       "streams": {
+               "publishes": [{
+                               "config_key": "DCAE-HELLO-WORLD-PUB-DR",
+                               "format": "dataformat_Hello_World_PM",
+                               "type": "data_router",
+                               "version": "1.0.0"
+                       },
+                       {
+                               "config_key": "DCAE-HELLO-WORLD-PUB-MR",
+                               "format": "dataformat_Hello_World_PM",
+                               "type": "message_router",
+                               "version": "1.0.0"
+                       }
+               ],
+               "subscribes": [{
+                               "config_key": "DCAE-HELLO-WORLD-SUB-MR",
+                               "format": "dataformat_Hello_World_PM",
+                               "route": "/DCAE_HELLO_WORLD_SUB_MR",
+                               "type": "message_router",
+                               "version": "1.0.0"
+                       },
+                       {
+                               "config_key": "DCAE-HELLO-WORLD-SUB-DR",
+                               "format": "dataformat_Hello_World_PM",
+                               "route": "/DCAE-HELLO-WORLD-SUB-DR",
+                               "type": "data_router",
+                               "version": "1.0.0"
+                       }               
+               ]
+       },
+    "parameters": 
+    [
+        {
+            "name": "vcc_hello_name",
+            "value": "fsdfa",
+            "description": "the name entered for specific person",
+                       "sourced_at_deployment": true,
+                       "designer_editable": true,
+                       "policy_editable": false,
+                       "type": "string"         
+        },
+        
+        {
+                       "name": "useDtiConfig",
+                       "value": false,
+                       "description": "component depends on configuration from dti.",
+                       "sourced_at_deployment": false,
+                       "designer_editable": false,
+                       "policy_editable": false,
+                        "required" : true
+               },
+
+               {
+                       "name": "isSelfServeComponent",
+                       "value": false,
+                       "description": "Is this used as self serve component.",
+                       "sourced_at_deployment": false,
+                       "designer_editable": false,
+                       "policy_editable": false,
+                       "required" : true,
+                       "type": "string"
+               }
+    ],
+       "auxilary": {
+               "healthcheck": {
+                       "interval": "60s",
+                       "timeout": "20s",
+                       "script": "/opt/app/vcc/bin/common/HealthCheck_HelloWorld.sh",
+                       "type": "docker"
+               },
+               "log_info": {
+                       "log_directory": "/opt/app/VESCollector/logs/ecomp"
+               },
+               "tls_info":{
+                       "cert_directory":"/opt/app/dh/etc/cert",
+                       "use_tls":true
+               },
+               "databases": {
+                       "dcaes": "PgaaS",
+                       "repo": "PgaaS",
+                       "dti": "pgaas"
+               },
+               "volumes": [
+               {
+                       "container": {
+                       "bind": "/opt/app/dcae-certificate"
+                       },
+                       "host": {
+                               "path": "/opt/app/dcae-certificate"
+                       }
+               },
+               {
+                       "container": {
+                       "bind": "/opt/logs/DCAE/dmd/AGENT"
+                       },
+                       "host": {
+                               "path": "/opt/logs/DCAE/helloworldpm/dmd/AGENT"
+                       }
+               },
+               {
+                       "container": {
+                       "bind": "/opt/logs/DCAE/dmd/WATCHER"
+                       },
+                       "host": {
+                               "path": "/opt/logs/DCAE/helloworldpm/dmd/WATCHER"
+                       }
+               },
+               {
+                       "container": {
+                       "bind": "/opt/app/vcc/logs/DCAE"
+                       },
+                       "host": {
+                               "path": "/opt/logs/DCAE/helloworldpm/vcc-logs"
+                       }
+               },
+               {
+                       "container": {
+                       "bind": "/opt/app/vcc/archive/data"
+                       },
+                       "host": {
+                               "path": "/opt/data/DCAE/helloworldpm/vcc-archive"
+                       }
+               }
+        ]        
+    },
+       "policy_info":{
+               "policy":[
+                       {
+                       "node_label":"tca_policy_00",
+                       "policy_model_id":"onap.policies.monitoring.cdap.tca.hi.lo.app"
+                       },
+                       {
+                               "node_label":"tca_policy_11",
+                               "policy_id":"tca_policy_id_11",
+                               "policy_model_id":"onap.policies.monitoring.cdap.tca.hi.lo.app"
+                       }
+               ]
+       },
+       "artifacts": [{
+               "type": "docker image",
+               "uri": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+       }]      
+}
\ No newline at end of file
diff --git a/mod/bpgenerator/TestCases/ves/blueprints/ves-no-change_yaml.yaml b/mod/bpgenerator/TestCases/ves/blueprints/ves-no-change_yaml.yaml
new file mode 100644 (file)
index 0000000..b93f9c1
--- /dev/null
@@ -0,0 +1,187 @@
+#  ============LICENSE_START=======================================================
+#    org.onap.dcae
+#    ================================================================================
+#    Copyright (c) 2019-2020 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=========================================================
+#
+#
+#description: Collector for receiving VES events through restful interface
+#blueprint_version: 1.5.0
+---
+tosca_definitions_version: cloudify_dsl_1_3
+imports:
+- https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/k8splugin/1.7.1/k8splugin_types.yaml
+inputs:
+  always_pull_image:
+    type: boolean
+    description: Set to true if the image should always be pulled
+    default: true
+  collector.dmaap.streamid:
+    type: string
+    default: "fault=ves-fault,ves-fault-secondary|syslog=ves-syslog,ves-syslog-secondary|heartbeat=ves-heartbeat,ves-heartbeat-secondary|measurementsForVfScaling=ves-measurement,ves-measurement-secondary|mobileFlow=ves-mobileflow,ves-mobileflow-secondary|other=ves-other,ves-other-secondary|stateChange=ves-statechange,ves-statechange-secondary|thresholdCrossingAlert=ves-thresholdCrossingAlert,ves-thresholdCrossingAlert-secondary|voiceQuality=ves-voicequality,ves-voicequality-secondary|sipSignaling=ves-sipsignaling,ves-sipsignaling-secondary|notification=ves-notification,ves-notification-secondary|pnfRegistration=ves-pnfRegistration,ves-pnfRegistration-secondary"
+  dcae-ves-collector_cpu_limit:
+    type: string
+    default: "250m"
+  dcae-ves-collector_cpu_request:
+    type: string
+    default: "250m"
+  dcae-ves-collector_memory_limit:
+    type: string
+    default: "128Mi"
+  dcae-ves-collector_memory_request:
+    type: string
+    default: "128Mi"
+  envs:
+    default: {}
+  external_port_0:
+    type: string
+    default: "8080"
+  external_port_1:
+    type: string
+    default: "8443"
+  header.authlist:
+    type: string
+    default: "sample1,$2a$10$pgjaxDzSuc6XVFEeqvxQ5u90DKJnM/u7TJTcinAlFJVaavXMWf/Zi|userid1,$2a$10$61gNubgJJl9lh3nvQvY9X.x4e5ETWJJ7ao7ZhJEvmfJigov26Z6uq|userid2,$2a$10$G52y/3uhuhWAMy.bx9Se8uzWinmbJa.dlm1LW6bYPdPkkywLDPLiy"
+  image:
+    type: string
+    default: "nexus.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+  location_id:
+    type: string
+    default: ""
+  replicas:
+    type: integer
+    description: number of instances
+    default: 1
+  service_component_name_override:
+    type: string
+    default: ""
+  ves_fault_publish_url:
+    type: string
+  ves_heartbeat_secondary_publish_url:
+    type: string
+  ves_measurement_publish_url:
+    type: string
+  ves_notification_publish_url:
+    type: string
+  ves_other_publish_url:
+    type: string
+  ves_pnfRegistration_publish_url:
+    type: string
+node_templates:
+  dcae-ves-collector:
+    type: dcae.nodes.ContainerizedPlatformComponent
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        start:
+          inputs:
+            ports:
+            - concat: ["8080:", {get_input: external_port_0}]
+            - concat: ["8443:", {get_input: external_port_1}]
+            envs:
+              get_input: envs
+    properties:
+      application_config:
+        service_calls: []
+        streams_publishes:
+          ves-fault:
+            dmaap_info:
+              topic_url:
+                get_input: ves_fault_publish_url
+            type: message router
+          ves-heartbeat-secondary:
+            dmaap_info:
+              topic_url:
+                get_input: ves_heartbeat_secondary_publish_url
+            type: message router
+          ves-measurement:
+            dmaap_info:
+              topic_url:
+                get_input: ves_measurement_publish_url
+            type: message router
+          ves-notification:
+            dmaap_info:
+              topic_url:
+                get_input: ves_notification_publish_url
+            type: message router
+          ves-other:
+            dmaap_info:
+              topic_url:
+                get_input: ves_other_publish_url
+            type: message router
+          ves-pnfRegistration:
+            dmaap_info:
+              topic_url:
+                get_input: ves_pnfRegistration_publish_url
+            type: message router
+        streams_subscribes: {}
+        auth.method: noAuth
+        collector.dmaap.streamid:
+          get_input: collector.dmaap.streamid
+        collector.keystore.file.location: /opt/app/dcae-certificate/keystore.jks
+        collector.keystore.passwordfile: /opt/app/dcae-certificate/.password
+        collector.schema.checkflag: 1
+        collector.schema.file: {"v1":"./etc/CommonEventFormat_27.2.json","v2":"./etc/CommonEventFormat_27.2.json","v3":"./etc/CommonEventFormat_27.2.json","v4":"./etc/CommonEventFormat_27.2.json","v5":"./etc/CommonEventFormat_28.4.1.json","v7":"./etc/CommonEventFormat_30.json"}
+        collector.service.port: 8080
+        collector.service.secure.port: 8443
+        collector.truststore.file.location: /opt/app/dcae-certificate/truststore.jks
+        collector.truststore.passwordfile: /opt/app/dcae-certificate/.trustpassword
+        event.transform.flag: 1
+        header.authlist:
+          get_input: header.authlist
+        service_component_name_override:
+          get_input: service_component_name_override
+        tomcat.maxthreads: 200
+      docker_config:
+        healthcheck:
+          interval: 15s
+          timeout: 1s
+          type: https
+          endpoint: /healthcheck
+        volumes:
+        - container:
+            bind: /opt/app/dcae-certificate
+          host:
+            path: /opt/app/dcae-certificate
+        - container:
+            bind: /opt/app/VESCollector/logs
+          host:
+            path: /opt/logs/DCAE/VESCollector/logs
+        - container:
+            bind: /opt/app/VESCollector/etc
+          host:
+            path: /opt/logs/DCAE/VESCollector/etc
+      image:
+        get_input: image
+      location_id:
+        get_input: location_id
+      dns_name: dcae-ves-collector
+      replicas:
+        get_input: replicas
+      name: dcae-ves-collector
+      resource_config:
+        limits:
+          cpu:
+            get_input: dcae-ves-collector_cpu_limit
+          memory:
+            get_input: dcae-ves-collector_memory_limit
+        requests:
+          cpu:
+            get_input: dcae-ves-collector_cpu_request
+          memory:
+            get_input: dcae-ves-collector_memory_request
+      always_pull_image:
+        get_input: always_pull_image
+    relationships: []
\ No newline at end of file
diff --git a/mod/bpgenerator/TestCases/ves/blueprints/ves-with-dmaap_yaml.yaml b/mod/bpgenerator/TestCases/ves/blueprints/ves-with-dmaap_yaml.yaml
new file mode 100644 (file)
index 0000000..915411e
--- /dev/null
@@ -0,0 +1,314 @@
+#  ============LICENSE_START=======================================================
+#    org.onap.dcae
+#    ================================================================================
+#    Copyright (c) 2019-2020 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=========================================================
+#description: Collector for receiving VES events through restful interface
+#blueprint_version: 1.5.0
+---
+tosca_definitions_version: cloudify_dsl_1_3
+description: Collector for receiving VES events through restful interface
+imports:
+- https://www.getcloudify.org/spec/cloudify/4.5.5/types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R6/k8splugin/1.7.1/k8splugin_types.yaml
+- https://nexus.onap.org/service/local/repositories/raw/content/org.onap.ccsdk.platform.plugins/type_files/dmaap/dmaap.yaml
+inputs:
+  collector.dmaap.streamid:
+    type: string
+    default: "fault=ves-fault,ves-fault-secondary|syslog=ves-syslog,ves-syslog-secondary|heartbeat=ves-heartbeat,ves-heartbeat-secondary|measurementsForVfScaling=ves-measurement,ves-measurement-secondary|mobileFlow=ves-mobileflow,ves-mobileflow-secondary|other=ves-other,ves-other-secondary|stateChange=ves-statechange,ves-statechange-secondary|thresholdCrossingAlert=ves-thresholdCrossingAlert,ves-thresholdCrossingAlert-secondary|voiceQuality=ves-voicequality,ves-voicequality-secondary|sipSignaling=ves-sipsignaling,ves-sipsignaling-secondary|notification=ves-notification,ves-notification-secondary|pnfRegistration=ves-pnfRegistration,ves-pnfRegistration-secondary"
+  dcae-ves-collector_cpu_limit:
+    type: string
+    default: "250m"
+  dcae-ves-collector_cpu_request:
+    type: string
+    default: "250m"
+  dcae-ves-collector_memory_limit:
+    type: string
+    default: "128Mi"
+  dcae-ves-collector_memory_request:
+    type: string
+    default: "128Mi"
+  envs:
+    default: {}
+  external_port_0:
+    type: string
+    default: "8080"
+  external_port_1:
+    type: string
+    default: "8443"
+  header.authlist:
+    type: string
+    default: "sample1,$2a$10$pgjaxDzSuc6XVFEeqvxQ5u90DKJnM/u7TJTcinAlFJVaavXMWf/Zi|userid1,$2a$10$61gNubgJJl9lh3nvQvY9X.x4e5ETWJJ7ao7ZhJEvmfJigov26Z6uq|userid2,$2a$10$G52y/3uhuhWAMy.bx9Se8uzWinmbJa.dlm1LW6bYPdPkkywLDPLiy"
+  replicas:
+    type: integer
+    description: number of instances
+    default: 1
+  service_component_name_override:
+    type: string
+    default: ""
+  tag_version:
+    type: string
+    default: "nexus.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+  topic0_name:
+    type: string
+  topic1_name:
+    type: string
+  topic2_name:
+    type: string
+  topic3_name:
+    type: string
+  topic4_name:
+    type: string
+  topic5_name:
+    type: string
+  ves-fault_topic0_aaf_password:
+    type: string
+  ves-fault_topic0_aaf_username:
+    type: string
+  ves-fault_topic0_client_role:
+    type: string
+  ves-fault_topic0_location:
+    type: string
+  ves-heartbeat-secondary_topic3_aaf_password:
+    type: string
+  ves-heartbeat-secondary_topic3_aaf_username:
+    type: string
+  ves-heartbeat-secondary_topic3_client_role:
+    type: string
+  ves-heartbeat-secondary_topic3_location:
+    type: string
+  ves-measurement_topic1_aaf_password:
+    type: string
+  ves-measurement_topic1_aaf_username:
+    type: string
+  ves-measurement_topic1_client_role:
+    type: string
+  ves-measurement_topic1_location:
+    type: string
+  ves-notification_topic5_aaf_password:
+    type: string
+  ves-notification_topic5_aaf_username:
+    type: string
+  ves-notification_topic5_client_role:
+    type: string
+  ves-notification_topic5_location:
+    type: string
+  ves-other_topic2_aaf_password:
+    type: string
+  ves-other_topic2_aaf_username:
+    type: string
+  ves-other_topic2_client_role:
+    type: string
+  ves-other_topic2_location:
+    type: string
+  ves-pnfRegistration_topic4_aaf_password:
+    type: string
+  ves-pnfRegistration_topic4_aaf_username:
+    type: string
+  ves-pnfRegistration_topic4_client_role:
+    type: string
+  ves-pnfRegistration_topic4_location:
+    type: string
+node_templates:
+  dcae-ves-collector:
+    type: dcae.nodes.ContainerizedServiceComponentUsingDmaap
+    interfaces:
+      cloudify.interfaces.lifecycle:
+        start:
+          inputs:
+            ports:
+            - concat: ["8080:", {get_input: external_port_0}]
+            - concat: ["8443:", {get_input: external_port_1}]
+            envs:
+              get_input: envs
+    properties:
+      application_config:
+        service_calls: []
+        streams_publishes:
+          ves-fault:
+            dmaap_info: <<topic0>>
+            type: message router
+            pass:
+              get_input: ves-fault_topic0_aaf_password
+            user:
+              get_input: ves-fault_topic0_aaf_username
+          ves-heartbeat-secondary:
+            dmaap_info: <<topic3>>
+            type: message router
+            pass:
+              get_input: ves-heartbeat-secondary_topic3_aaf_password
+            user:
+              get_input: ves-heartbeat-secondary_topic3_aaf_username
+          ves-measurement:
+            dmaap_info: <<topic1>>
+            type: message router
+            pass:
+              get_input: ves-measurement_topic1_aaf_password
+            user:
+              get_input: ves-measurement_topic1_aaf_username
+          ves-notification:
+            dmaap_info: <<topic5>>
+            type: message router
+            pass:
+              get_input: ves-notification_topic5_aaf_password
+            user:
+              get_input: ves-notification_topic5_aaf_username
+          ves-other:
+            dmaap_info: <<topic2>>
+            type: message router
+            pass:
+              get_input: ves-other_topic2_aaf_password
+            user:
+              get_input: ves-other_topic2_aaf_username
+          ves-pnfRegistration:
+            dmaap_info: <<topic4>>
+            type: message router
+            pass:
+              get_input: ves-pnfRegistration_topic4_aaf_password
+            user:
+              get_input: ves-pnfRegistration_topic4_aaf_username
+        streams_subscribes: {}
+        auth.method: noAuth
+        collector.dmaap.streamid:
+          get_input: collector.dmaap.streamid
+        collector.keystore.file.location: /opt/app/dcae-certificate/keystore.jks
+        collector.keystore.passwordfile: /opt/app/dcae-certificate/.password
+        collector.schema.checkflag: 1
+        collector.schema.file: {"v1":"./etc/CommonEventFormat_27.2.json","v2":"./etc/CommonEventFormat_27.2.json","v3":"./etc/CommonEventFormat_27.2.json","v4":"./etc/CommonEventFormat_27.2.json","v5":"./etc/CommonEventFormat_28.4.1.json","v7":"./etc/CommonEventFormat_30.json"}
+        collector.service.port: 8080
+        collector.service.secure.port: 8443
+        collector.truststore.file.location: /opt/app/dcae-certificate/truststore.jks
+        collector.truststore.passwordfile: /opt/app/dcae-certificate/.trustpassword
+        event.transform.flag: 1
+        header.authlist:
+          get_input: header.authlist
+        service_component_name_override:
+          get_input: service_component_name_override
+        tomcat.maxthreads: 200
+      docker_config:
+        healthcheck:
+          interval: 15s
+          timeout: 1s
+          type: http
+          endpoint: /healthcheck
+        volumes:
+        - container:
+            bind: /opt/app/dcae-certificate
+          host:
+            path: /opt/app/dcae-certificate
+        - container:
+            bind: /opt/app/VESCollector/logs
+          host:
+            path: /opt/logs/DCAE/VESCollector/logs
+        - container:
+            bind: /opt/app/VESCollector/etc
+          host:
+            path: /opt/logs/DCAE/VESCollector/etc
+      image:
+        get_input: tag_version
+      service_component_type: dcae-ves-collector
+      replicas:
+        get_input: replicas
+      streams_publishes:
+      - name: topic0
+        location:
+          get_input: ves-fault_topic0_location
+        client_role:
+          get_input: ves-fault_topic0_client_role
+        type: message router
+      - name: topic1
+        location:
+          get_input: ves-measurement_topic1_location
+        client_role:
+          get_input: ves-measurement_topic1_client_role
+        type: message router
+      - name: topic2
+        location:
+          get_input: ves-other_topic2_location
+        client_role:
+          get_input: ves-other_topic2_client_role
+        type: message router
+      - name: topic3
+        location:
+          get_input: ves-heartbeat-secondary_topic3_location
+        client_role:
+          get_input: ves-heartbeat-secondary_topic3_client_role
+        type: message router
+      - name: topic4
+        location:
+          get_input: ves-pnfRegistration_topic4_location
+        client_role:
+          get_input: ves-pnfRegistration_topic4_client_role
+        type: message router
+      - name: topic5
+        location:
+          get_input: ves-notification_topic5_location
+        client_role:
+          get_input: ves-notification_topic5_client_role
+        type: message router
+      resource_config:
+        limits:
+          cpu:
+            get_input: dcae-ves-collector_cpu_limit
+          memory:
+            get_input: dcae-ves-collector_memory_limit
+        requests:
+          cpu:
+            get_input: dcae-ves-collector_cpu_request
+          memory:
+            get_input: dcae-ves-collector_memory_request
+    relationships:
+    - type: ccsdk.relationships.publish_events
+      target: topic0
+    - type: ccsdk.relationships.publish_events
+      target: topic1
+    - type: ccsdk.relationships.publish_events
+      target: topic2
+    - type: ccsdk.relationships.publish_events
+      target: topic3
+    - type: ccsdk.relationships.publish_events
+      target: topic4
+    - type: ccsdk.relationships.publish_events
+      target: topic5
+  topic0:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: topic0_name
+  topic1:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: topic1_name
+  topic2:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: topic2_name
+  topic3:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: topic3_name
+  topic4:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: topic4_name
+  topic5:
+    type: ccsdk.nodes.Topic
+    properties:
+      topic_name:
+        get_input: topic5_name
\ No newline at end of file
diff --git a/mod/bpgenerator/TestCases/ves/componentSpecs/ves.json b/mod/bpgenerator/TestCases/ves/componentSpecs/ves.json
new file mode 100644 (file)
index 0000000..6812347
--- /dev/null
@@ -0,0 +1,276 @@
+{
+  "self": {
+    "version": "1.5.0",
+    "name": "dcae-ves-collector",
+    "description": "Collector for receiving VES events through restful interface",
+    "component_type": "docker"
+  },
+  "streams": {
+    "subscribes": [],
+    "publishes": [
+      {
+        "format": "VES_specification",
+        "version": "5.28.4",
+        "type": "message router",
+        "config_key": "ves-fault" 
+      },
+      {
+        "format": "VES_specification",
+        "version": "5.28.4",
+        "type": "message router",
+        "config_key": "ves-measurement" 
+      },
+      {
+        "format": "VES_specification",
+        "version": "5.28.4",
+        "type": "message router",
+        "config_key": "ves-other"  
+      },
+      {
+        "format": "VES_specification",
+        "version": "5.28.4",
+        "type": "message router",
+        "config_key": "ves-heartbeat-secondary" 
+      },
+      {
+        "format": "VES_specification",
+        "version": "7.30.0",
+        "type": "message router",
+        "config_key": "ves-pnfRegistration" 
+      },
+      {
+        "format": "VES_specification",
+        "version": "7.30.0",
+        "type": "message router",
+        "config_key": "ves-notification" 
+      }
+    ]
+  },
+  "services": {
+    "calls": [],
+    "provides": [
+      {
+        "route": "/eventListener/v1",
+        "verb": "POST",
+        "request": {
+          "format": "VES_specification",
+          "version": "4.27.2"
+        },
+        "response": {
+          "format": "ves.coll.response",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "route": "/eventListener/v2",
+        "verb": "POST",
+        "request": {
+          "format": "VES_specification",
+          "version": "4.27.2"
+        },
+        "response": {
+          "format": "ves.coll.response",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "route": "/eventListener/v3",
+        "verb": "POST",
+        "request": {
+          "format": "VES_specification",
+          "version": "4.27.2"
+        },
+        "response": {
+          "format": "ves.coll.response",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "route": "/eventListener/v4",
+        "verb": "POST",
+        "request": {
+          "format": "VES_specification",
+          "version": "4.27.2"
+        },
+        "response": {
+          "format": "ves.coll.response",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "route": "/eventListener/v5",
+        "verb": "POST",
+        "request": {
+          "format": "VES_specification",
+          "version": "5.28.4"
+        },
+        "response": {
+          "format": "ves.coll.response",
+          "version": "1.0.0"
+        }
+      },
+      {
+        "route": "/eventListener/v7",
+        "verb": "POST",
+        "request": {
+          "format": "VES_specification",
+          "version": "7.30.0"
+        },
+        "response": {
+          "format": "ves.coll.response",
+          "version": "1.0.0"
+        }
+      }
+    ]
+  },
+  "parameters": [
+    {
+      "name": "collector.service.port",
+      "value": 8080,
+      "description": "standard http port collector will open for listening;",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "collector.service.secure.port",
+      "value": 8443,
+      "description": "secure http port collector will open for listening ",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": true
+    },
+    {
+      "name": "collector.keystore.file.location",
+      "value": "/opt/app/dcae-certificate/keystore.jks",
+      "description": "fs location of keystore file in vm",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "collector.keystore.passwordfile",
+      "value": "/opt/app/dcae-certificate/.password",
+      "description": "location of keystore password file in vm",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "collector.truststore.file.location",
+      "value": "/opt/app/dcae-certificate/truststore.jks",
+      "description": "fs location of truststore file in vm",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "collector.truststore.passwordfile",
+      "value": "/opt/app/dcae-certificate/.trustpassword",
+      "description": "location of truststore password file in vm",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "collector.dmaap.streamid",
+      "value": "fault=ves-fault,ves-fault-secondary|syslog=ves-syslog,ves-syslog-secondary|heartbeat=ves-heartbeat,ves-heartbeat-secondary|measurementsForVfScaling=ves-measurement,ves-measurement-secondary|mobileFlow=ves-mobileflow,ves-mobileflow-secondary|other=ves-other,ves-other-secondary|stateChange=ves-statechange,ves-statechange-secondary|thresholdCrossingAlert=ves-thresholdCrossingAlert,ves-thresholdCrossingAlert-secondary|voiceQuality=ves-voicequality,ves-voicequality-secondary|sipSignaling=ves-sipsignaling,ves-sipsignaling-secondary|notification=ves-notification,ves-notification-secondary|pnfRegistration=ves-pnfRegistration,ves-pnfRegistration-secondary",
+      "description": "domain-to-streamid mapping used by VESCollector to distributes events based on domain. Both primary and secondary config_key are included for resilency (multiple streamid can be included commma separated). The streamids MUST match to topic config_keys. For single site without resiliency deployment - configkeys with -secondary suffix can be removed",
+      "sourced_at_deployment": true,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "auth.method",
+      "value": "noAuth",
+      "description": "Property to manage application mode, possible configurations: noAuth - default option - no security (http) , certOnly - auth by certificate (https), basicAuth - auth by basic auth username and password (https),certBasicAuth - auth by certificate and basic auth username / password (https),",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "header.authlist",
+      "value": "sample1,$2a$10$pgjaxDzSuc6XVFEeqvxQ5u90DKJnM/u7TJTcinAlFJVaavXMWf/Zi|userid1,$2a$10$61gNubgJJl9lh3nvQvY9X.x4e5ETWJJ7ao7ZhJEvmfJigov26Z6uq|userid2,$2a$10$G52y/3uhuhWAMy.bx9Se8uzWinmbJa.dlm1LW6bYPdPkkywLDPLiy",
+      "description": "List of id and base 64 encoded password.For each onboarding VNF - unique userid and password should be assigned and communicated to VNF owner. Password value should be base64 encoded in config here",
+      "policy_editable": false,
+      "sourced_at_deployment": true,
+      "designer_editable": true
+    },
+    {
+      "name": "collector.schema.checkflag",
+      "value": 1,
+      "description": "Schema check validation flag. When enabled, collector will validate input VES events against VES Schema defined on collector.schema.file ",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "collector.schema.file",
+      "value": "{\"v1\":\"./etc/CommonEventFormat_27.2.json\",\"v2\":\"./etc/CommonEventFormat_27.2.json\",\"v3\":\"./etc/CommonEventFormat_27.2.json\",\"v4\":\"./etc/CommonEventFormat_27.2.json\",\"v5\":\"./etc/CommonEventFormat_28.4.1.json\",\"v7\":\"./etc/CommonEventFormat_30.json\"}",
+      "description": "VES schema file name per version used for validation",
+      "designer_editable": true,
+      "sourced_at_deployment": false,
+      "policy_editable": false
+    },
+    {
+      "name": "event.transform.flag",
+      "value": 1,
+      "description": "flag to enable tranformation rules defined under eventTransform.json; this is applicable when event tranformation rules preset should be activated for transforming <VES5.4 events to 5.4",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    },
+    {
+      "name": "tomcat.maxthreads",
+      "value": "200",
+      "description": "Tomcat control for concurrent request",
+      "sourced_at_deployment": false,
+      "policy_editable": false,
+      "designer_editable": false
+    }
+  ],
+  "auxilary": {
+    "healthcheck": {
+      "type": "http",
+      "interval": "15s",
+      "timeout": "1s",
+      "endpoint": "/healthcheck"
+    },
+    "volumes": [
+      {
+        "container": {
+          "bind": "/opt/app/dcae-certificate"
+        },
+        "host": {
+          "path": "/opt/app/dcae-certificate"
+        }
+      },
+      {
+        "container": {
+          "bind": "/opt/app/VESCollector/logs"
+        },
+        "host": {
+          "path": "/opt/logs/DCAE/VESCollector/logs"
+        }
+      },
+      {
+        "container": {
+          "bind": "/opt/app/VESCollector/etc"
+        },
+        "host": {
+          "path": "/opt/logs/DCAE/VESCollector/etc"
+        }
+      }
+    ],
+    "ports": [
+      "8080:8080",
+      "8443:8443"
+    ]
+  },
+  "artifacts": [
+    {
+      "type": "docker image",
+      "uri": "nexus.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:latest"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/mod/bpgenerator/TestCases/ves/inputFiles/ves_nodmaap.json b/mod/bpgenerator/TestCases/ves/inputFiles/ves_nodmaap.json
new file mode 100644 (file)
index 0000000..720ce5f
--- /dev/null
@@ -0,0 +1,11 @@
+{
+  "ves_other_publish_url":"http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.SEC_OTHER_OUTPUT",
+  "ves_heartbeat_publish_url":"http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.SEC_HEARTBEAT_OUTPUT",
+  "ves_fault_publish_url":"http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.SEC_FAULT_OUTPUT",
+  "ves_measurement_publish_url":"http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.VES_MEASUREMENT_OUTPUT",
+  "ves_notification_publish_url":"http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.VES_NOTIFICATION_OUTPUT",
+  "ves_pnfRegistration_publish_url":"http://message-router.onap.svc.cluster.local:3904/events/unauthenticated.VES_PNFREG_OUTPUT",
+  "external_port_0":"30235",
+  "external_port_1": "30417",
+  "image": "nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.ves.vescollector:1.3.1"
+}
\ No newline at end of file
index d63b9c9..e1a50b4 100644 (file)
        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.oparent</groupId> 
-               <artifactId>oparent</artifactId> 
-               <version>2.0.0</version> 
+               <groupId>org.onap.oparent</groupId>
+               <artifactId>oparent</artifactId>
+               <version>2.0.0</version>
        </parent>
        <groupId>org.onap.dcaegen2.platform.mod</groupId>
        <artifactId>blueprint-generator</artifactId>
-       <version>1.2.1-SNAPSHOT</version>
+       <version>1.3.0-SNAPSHOT</version>
        <properties>
                <maven.compiler.source>1.6</maven.compiler.source>
                <maven.compiler.target>1.6</maven.compiler.target>
index cbff42b..3a4b457 100644 (file)
@@ -29,6 +29,7 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.List;
 
 public class Fixes {
        private static ArrayList<String> lines = new ArrayList<String>();
@@ -40,6 +41,7 @@ public class Fixes {
                        FileReader fr = new FileReader(translateFile);
                        BufferedReader br = new BufferedReader(fr);
                        while((line = br.readLine()) != null) {
+//                             lines.add(ensureNoSingleQuotes(line));
                                if(line.contains("'")) {
                                        line = line.replace("'", "");
                                }
@@ -67,4 +69,36 @@ public class Fixes {
                        throw new RuntimeException(e);
                }
        }
+
+       /**
+        * Remove single quotes from a line from a blueprint
+        */
+       private static String ensureNoSingleQuotes(String line) {
+               // TODO: Should probably use regex instead
+               // REVIEW: The condition under which to remove the single quotes
+               if ((line.contains("concat") || line.contains("default: ")) && line.contains("'")) {
+                       return line.replace("'", "");
+               } else {
+                       return line;
+               }
+       }
+
+       /**
+        * Takes in an entire blueprint (YAML) in a string buffer and post processes it to apply
+        * "fixes" like removing unwanted single quotes.
+        */
+       public static String applyFixes(String bp) {
+               List<String> lines = new ArrayList<String>();
+
+               String[] linesPre = bp.split("\n");
+               System.out.println(String.format("To post-processing #lines: %d", linesPre.length));
+
+               for (String line : linesPre) {
+                       lines.add(ensureNoSingleQuotes(line));
+               }
+
+               return String.join("\n", lines);
+       }
+
+
 }
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/PgaasNodeBuilder.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/PgaasNodeBuilder.java
new file mode 100644 (file)
index 0000000..a22d588
--- /dev/null
@@ -0,0 +1,130 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019-2020 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.core;
+
+import org.onap.blueprintgenerator.exception.DatabasesNotFoundException;
+import org.onap.blueprintgenerator.models.GetAttribute;
+import org.onap.blueprintgenerator.models.blueprint.GetInput;
+import org.onap.blueprintgenerator.models.blueprint.Node;
+import org.onap.blueprintgenerator.models.blueprint.pgaas.PgaasNode;
+import org.onap.blueprintgenerator.models.blueprint.pgaas.PgaasNodeProperties;
+import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
+
+import java.util.*;
+
+public class PgaasNodeBuilder {
+
+    private static final String PGAAS_NODE_TYPE = "dcae.nodes.pgaas.database";
+    private static final String PGAAS_NODE_NAME_POSTFIX = "_pgaasdb";
+    private static final String WRITER_FQDN_POSTFIX = "_database_writerfqdn";
+    private static final String NAME_POSTFIX = "_database_name";
+    private static final boolean USE_EXISTING = true;
+    private static final String DB_RELATIONSHIP_TYPE = "cloudify.relationships.depends_on";
+
+
+
+    public static void addPgaasNodesAndInputs(ComponentSpec cs, TreeMap<String, Node> nodeTemplate, TreeMap<String, LinkedHashMap<String, Object>> inps)  {
+        TreeMap<String, String> databases = cs.getAuxilary().getDatabases();
+        if(databases == null){
+            throw new DatabasesNotFoundException("databases section not found in componentspec");
+        }
+        for(Map.Entry<String, String> database : databases.entrySet()){
+            addPgaasNode(database, nodeTemplate);
+            addPgaasInputs(database, inps);
+        }
+    }
+
+    private static void addPgaasInputs(Map.Entry<String, String> database, TreeMap<String, LinkedHashMap<String, Object>> inps) {
+        inps.put(database.getKey() + NAME_POSTFIX, getInputValue("string", "db name", ""));
+        inps.put(database.getKey() + WRITER_FQDN_POSTFIX, getInputValue("string", "db writerfqdn", ""));
+    }
+
+    private static LinkedHashMap<String, Object> getInputValue(String type, String description, Object defaultValue) {
+        LinkedHashMap<String, Object> inputValueMap = new LinkedHashMap();
+        inputValueMap.put("type", type);
+        inputValueMap.put("description", description);
+        inputValueMap.put("default", defaultValue);
+        return  inputValueMap;
+    }
+
+    private static void addPgaasNode(Map.Entry<String, String> database, TreeMap<String, Node> nodeTemplate) {
+        PgaasNode pgaasNode = new PgaasNode();
+        String dbName = database.getKey();
+        pgaasNode.setType(PGAAS_NODE_TYPE);
+        pgaasNode.setPgaasNodeProperties(buildPgaasNodeProperties(dbName));
+        nodeTemplate.put(dbName + PGAAS_NODE_NAME_POSTFIX , pgaasNode);
+    }
+
+    private static PgaasNodeProperties buildPgaasNodeProperties(String dbName) {
+        PgaasNodeProperties pgaasNodeProperties = new PgaasNodeProperties();
+
+        GetInput nameValue = new GetInput();
+        nameValue.setGet_input(dbName + NAME_POSTFIX);
+        pgaasNodeProperties.setName(nameValue);
+
+        GetInput writerfqdnValue = new GetInput();
+        writerfqdnValue.setGet_input(dbName + WRITER_FQDN_POSTFIX);
+        pgaasNodeProperties.setWriterfqdn(writerfqdnValue);
+
+        pgaasNodeProperties.setUseExisting(USE_EXISTING);
+
+        return pgaasNodeProperties;
+    }
+
+    public static ArrayList<LinkedHashMap<String, String>> getPgaasNodeRelationships(ComponentSpec cs) {
+        ArrayList<LinkedHashMap<String, String>> relationships = new ArrayList<>();
+        for(Map.Entry<String, String> database : cs.getAuxilary().getDatabases().entrySet()){
+            LinkedHashMap<String, String> relationship = new LinkedHashMap<>();
+            relationship.put("type", DB_RELATIONSHIP_TYPE);
+            relationship.put("target", database.getKey() + PGAAS_NODE_NAME_POSTFIX);
+            relationships.add(relationship);
+        }
+        return relationships;
+    }
+
+    public static LinkedHashMap<String, Object> getEnvVariables(TreeMap<String, String> databases) {
+        LinkedHashMap<String, Object> envVariables = new LinkedHashMap<String, Object>();
+        for(Map.Entry<String, String> database : databases.entrySet()){
+            String name = database.getKey().toUpperCase();
+
+            envVariables.put("<<", "*envs");
+
+            GetInput nameValue = new GetInput();
+            nameValue.setGet_input(name.toLowerCase() + NAME_POSTFIX);
+            envVariables.put(name + "_DB_NAME", nameValue);
+
+            GetAttribute adminHostValue = buildGetAttributeValue(name.toLowerCase(), "admin", "host");
+            envVariables.put( name.toUpperCase() + "_DB_ADMIN_HOST", adminHostValue);
+
+            GetAttribute adminUserValue = buildGetAttributeValue(name.toLowerCase(), "admin", "user");
+            envVariables.put( name.toUpperCase() + "_DB_ADMIN_USER", adminUserValue);
+
+            GetAttribute adminPasswordValue = buildGetAttributeValue(name.toLowerCase(), "admin", "password");
+            envVariables.put( name.toUpperCase() + "_DB_ADMIN_PASS", adminPasswordValue);
+        }
+        return envVariables;
+    }
+
+    private static GetAttribute buildGetAttributeValue(String dbName, String owner, String type) {
+        GetAttribute attribute = new GetAttribute();
+        attribute.setAttribute(Arrays.asList(dbName + PGAAS_NODE_NAME_POSTFIX, owner, type));
+        return attribute;
+    }
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/PolicyNodeBuilder.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/core/PolicyNodeBuilder.java
new file mode 100644 (file)
index 0000000..a947ab7
--- /dev/null
@@ -0,0 +1,90 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.core;
+
+import org.onap.blueprintgenerator.models.blueprint.GetInput;
+import org.onap.blueprintgenerator.models.blueprint.Node;
+import org.onap.blueprintgenerator.models.blueprint.policy.PolicyNode;
+import org.onap.blueprintgenerator.models.blueprint.policy.PolicyNodeProperties;
+import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
+import org.onap.blueprintgenerator.models.componentspec.policy_info.TypePolicy;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.TreeMap;
+
+public class PolicyNodeBuilder {
+
+    private static final String POLICY_NODE_TYPE = "clamp.nodes.policy";
+    private static final String POLICY_RELATIONSHIP_TYPE = "cloudify.relationships.depends_on";
+
+    public static void addPolicyNodesAndInputs(ComponentSpec cs, TreeMap<String, Node> nodeTemplate, TreeMap<String, LinkedHashMap<String, Object>> inps) {
+        List<TypePolicy> policyList = cs.getPolicyInfo().getTypePolicyList();
+        for(TypePolicy policy: policyList){
+            addPolicyNodesToNodeTemplate(policy, nodeTemplate);
+            addPolicyInputs(policy, inps);
+        }
+    }
+
+    private static void addPolicyInputs(TypePolicy policy, TreeMap<String, LinkedHashMap<String, Object>> inps) {
+        String defaultValue = policy.getPolicy_id() != null ? policy.getPolicy_id() : "";
+        inps.put(policy.getNode_label() + "_policy_id", getInputValue("string", "policy_id", defaultValue));
+    }
+
+    private static LinkedHashMap<String, Object> getInputValue(String type, String description, Object defaultValue) {
+        LinkedHashMap<String, Object> inputValueMap = new LinkedHashMap();
+        inputValueMap.put("type", type);
+        inputValueMap.put("description", description);
+        inputValueMap.put("default", defaultValue);
+        return  inputValueMap;
+    }
+
+    private static void addPolicyNodesToNodeTemplate(TypePolicy policy, TreeMap<String, Node> nodeTemplate) {
+        PolicyNode policyNode = new PolicyNode();
+        policyNode.setType(POLICY_NODE_TYPE);
+        policyNode.setPolicyNodeProperties(getPolicyNodeProperties(policy));
+        nodeTemplate.put(policy.getNode_label(), policyNode);
+    }
+
+    private static PolicyNodeProperties getPolicyNodeProperties(TypePolicy policy) {
+        PolicyNodeProperties policyNodeProperties = new PolicyNodeProperties();
+
+        GetInput policyIdGetInput = new GetInput();
+        policyIdGetInput.setGet_input(policy.getNode_label() + "_policy_id");
+        policyNodeProperties.setPolicyId(policyIdGetInput);
+
+        policyNodeProperties.setPolicyModelId(policy.getPolicy_model_id());
+
+        return policyNodeProperties;
+    }
+
+    public static ArrayList<LinkedHashMap<String, String>> getPolicyRelationships(ComponentSpec cs) {
+        ArrayList<LinkedHashMap<String, String>> relationships = new ArrayList<>();
+        List<TypePolicy> policyList = cs.getPolicyInfo().getTypePolicyList();
+        for(TypePolicy policy: policyList){
+            LinkedHashMap<String, String> relationship = new LinkedHashMap<>();
+            relationship.put("type", POLICY_RELATIONSHIP_TYPE);
+            relationship.put("target", policy.getNode_label());
+            relationships.add(relationship);
+        }
+        return relationships;
+    }
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/exception/DatabasesNotFoundException.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/exception/DatabasesNotFoundException.java
new file mode 100644 (file)
index 0000000..c9b2149
--- /dev/null
@@ -0,0 +1,24 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.exception;
+
+public class DatabasesNotFoundException extends RuntimeException {
+    public DatabasesNotFoundException(String message) { super(message);}
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/GetAttribute.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/GetAttribute.java
new file mode 100644 (file)
index 0000000..56184ff
--- /dev/null
@@ -0,0 +1,34 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019-2020 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class GetAttribute {
+
+    @JsonProperty("get_attribute")
+    private Object attribute;
+}
index 6d5b7d7..04745dc 100644 (file)
@@ -48,7 +48,8 @@ public class Appconfig {
                return params;
        }
 
-       public TreeMap<String, LinkedHashMap<String, Object>> createAppconfig(TreeMap<String, LinkedHashMap<String, Object>> inps, ComponentSpec cs, String override) {
+       public TreeMap<String, LinkedHashMap<String, Object>> createAppconfig(TreeMap<String, LinkedHashMap<String, Object>> inps, ComponentSpec cs, String override,
+                                                                                                                                                 boolean isDmaap) {
                TreeMap<String, LinkedHashMap<String, Object>> retInputs = new TreeMap<String, LinkedHashMap<String, Object>>();
                retInputs = inps;
 
@@ -58,26 +59,24 @@ public class Appconfig {
 
                //set the stream publishes
                TreeMap<String, DmaapObj> streamPublishes = new TreeMap<String, DmaapObj>();
-               int counter = 0;
                if(cs.getStreams().getPublishes().length != 0) {
                        for(Publishes p: cs.getStreams().getPublishes()) {
                                if(p.getType().equals("data_router") || p.getType().equals("data router")) {
                                        //in this case the data router information gets added to the params so for now leave it alone
                                        String config = p.getConfig_key();
                                        DmaapObj pub = new DmaapObj();
-                                       String name = "feed" + counter;
-                                       retInputs = pub.createOnapDmaapDRObj(retInputs, config, 'p', "feed" + counter, name);
+                                       String name = p.getConfig_key() +"_feed";
+                                       retInputs = pub.createOnapDmaapDRObj(retInputs, config, 'p', name, name, isDmaap);
                                        pub.setType(p.getType());
                                        streamPublishes.put(config, pub);
                                } else if(p.getType().equals("message_router") || p.getType().equals("message router")) {
                                        String config = p.getConfig_key();
                                        DmaapObj pub = new DmaapObj();
-                                       String name = "topic" + counter;
-                                       retInputs = pub.createOnapDmaapMRObj(retInputs, config, 'p', "topic" + counter, name);
+                                       String name =  p.getConfig_key() + "_topic";
+                                       retInputs = pub.createOnapDmaapMRObj(retInputs, config, 'p', name, name, isDmaap);
                                        pub.setType(p.getType());
                                        streamPublishes.put(config, pub);
                                }
-                               counter++;
                        }
                }
 
@@ -90,19 +89,18 @@ public class Appconfig {
                                        //in this case the data router information gets added to the params so for now leave it alone
                                        String config = s.getConfig_key();
                                        DmaapObj sub = new DmaapObj();
-                                       String name = "feed" + counter;
-                                       retInputs = sub.createOnapDmaapDRObj(retInputs, config, 'p', "feed" + counter, name);
+                                       String name = s.getConfig_key() + "_feed";
+                                       retInputs = sub.createOnapDmaapDRObj(retInputs, config, 'p', name, name, isDmaap);
                                        sub.setType(s.getType());
                                        streamSubscribes.put(config, sub);
                                } else if(s.getType().equals("message_router") || s.getType().equals("message router")) {
                                        String config = s.getConfig_key();
                                        DmaapObj sub = new DmaapObj();
-                                       String name = "topic" + counter;
-                                       retInputs = sub.createOnapDmaapMRObj(retInputs, config, 's', "topic" + counter, name);
+                                       String name = s.getConfig_key() + "_topic";
+                                       retInputs = sub.createOnapDmaapMRObj(retInputs, config, 's', name, name, isDmaap);
                                        sub.setType(s.getType());
                                        streamSubscribes.put(config, sub);
                                }
-                               counter++;
                        }
                }
 
index 06c42c5..75c79ba 100644 (file)
 
 package org.onap.blueprintgenerator.models.blueprint;
 
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
+import java.io.*;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
@@ -50,7 +46,7 @@ import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
-
+import org.yaml.snakeyaml.Yaml;
 
 
 @Getter @Setter
@@ -194,7 +190,6 @@ public class Blueprint {
                System.out.println("Blueprint created");
        }
 
-
        public String blueprintToString() {
                String ret = "";
 
@@ -206,6 +201,6 @@ public class Blueprint {
                }
 
 
-               return ret;
+               return Fixes.applyFixes(ret);
        }
 }
index 10092c8..7d78e3d 100644 (file)
@@ -23,8 +23,6 @@ package org.onap.blueprintgenerator.models.blueprint;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
 
-import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
-
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
@@ -32,12 +30,13 @@ import lombok.Getter; import lombok.Setter;
 @JsonInclude(value=Include.NON_NULL)
 @Getter @Setter
 public class DmaapObj {
-       private String dmaap_info;
+       private Object dmaap_info;
        private String type;
        private GetInput pass;
        private GetInput user;
 
-       public TreeMap<String, LinkedHashMap<String, Object>> createOnapDmaapMRObj(TreeMap<String, LinkedHashMap<String, Object>> inps, String config, char type, String n, String num) {
+       public TreeMap<String, LinkedHashMap<String, Object>> createOnapDmaapMRObj(TreeMap<String, LinkedHashMap<String, Object>> inps,
+                                                                                                                                                          String config, char type, String n, String num, boolean isDmaap) {
                TreeMap<String, LinkedHashMap<String, Object>> retInputs = new TreeMap<String, LinkedHashMap<String, Object>>();
                LinkedHashMap<String, Object> stringType = new LinkedHashMap();
                stringType.put("type", "string");
@@ -45,31 +44,41 @@ public class DmaapObj {
 
                //set the dmaapinfo
                DmaapInfo info = new DmaapInfo();
-               String infoType = "<<" + n + ">>";
-               this.setDmaap_info(infoType);
-
-               //set username
-               GetInput u = new GetInput();
-               u.setGet_input(config + "_" + num +"_aaf_username");
-               this.setUser(u);
-               retInputs.put(config + "_" + num +"_aaf_username", stringType);
-
-               //set password
-               GetInput p = new GetInput();
-               p.setGet_input(config + "_" + num +"_aaf_password");
-               this.setPass(p);
-               retInputs.put(config + "_" + num +"_aaf_password", stringType);
+               if(!isDmaap){
+                       info.createOnapDmaapMRInfo(inps, config, type);
+                       this.setDmaap_info(info);
+               }
+               else{
+                       String infoType = "<<" + n + ">>";
+                       this.setDmaap_info(infoType);
+                       //set username
+                       GetInput u = new GetInput();
+                       u.setGet_input(config + "_" + num +"_aaf_username");
+                       this.setUser(u);
+                       retInputs.put(config + "_" + num +"_aaf_username", stringType);
 
+                       //set password
+                       GetInput p = new GetInput();
+                       p.setGet_input(config + "_" + num +"_aaf_password");
+                       this.setPass(p);
+                       retInputs.put(config + "_" + num +"_aaf_password", stringType);
+               }
                return retInputs;
        }
-       public TreeMap<String, LinkedHashMap<String, Object>> createOnapDmaapDRObj(TreeMap<String, LinkedHashMap<String, Object>> inps, String config, char type, String n, String num) {
+       public TreeMap<String, LinkedHashMap<String, Object>> createOnapDmaapDRObj(TreeMap<String, LinkedHashMap<String, Object>> inps, String config, char type, String n, String num, boolean isDmaap) {
                TreeMap<String, LinkedHashMap<String, Object>> retInputs = new TreeMap<String, LinkedHashMap<String, Object>>();
                retInputs = inps;
                
                //set the dmaapinfo
                DmaapInfo info = new DmaapInfo();
-               String infoType = "<<" + n + ">>";
-               this.setDmaap_info(infoType);
+               if(!isDmaap){
+                       info.createOnapDmaapDRInfo(inps, config, type);
+                       this.setDmaap_info(info);
+               }
+               else {
+                       String infoType = "<<" + n + ">>";
+                       this.setDmaap_info(infoType);
+               }
                return retInputs;
        }
 }
index 25c4c53..31df9c3 100644 (file)
@@ -26,12 +26,9 @@ import java.util.TreeMap;
 
 import org.onap.blueprintgenerator.models.componentspec.Auxilary;
 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
-import org.onap.blueprintgenerator.models.componentspec.HealthCheck;
 import org.onap.blueprintgenerator.models.componentspec.Publishes;
 import org.onap.blueprintgenerator.models.componentspec.Subscribes;
-import org.onap.blueprintgenerator.models.componentspec.Volumes;
 import org.onap.blueprintgenerator.models.dmaapbp.DmaapStreams;
-import org.onap.blueprintgenerator.models.onapbp.LogDirectory;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
@@ -54,8 +51,9 @@ public class Properties {
        private GetInput feed_name;
        ArrayList<DmaapStreams> streams_publishes;
        ArrayList<DmaapStreams> streams_subscribes;
-       private TreeMap<String, Object> tls_info;
+       private TlsInfo tls_info;
        private ResourceConfig resource_config;
+       private GetInput always_pull_image;
        //private boolean useExisting;
 
        public TreeMap<String, LinkedHashMap<String, Object>> createOnapProperties(TreeMap<String, LinkedHashMap<String, Object>> inps, ComponentSpec cs, String override) {
@@ -77,18 +75,11 @@ public class Properties {
                this.setLocation_id(location);
                LinkedHashMap<String, Object> locMap = new LinkedHashMap();
                locMap.put("type", "string");
-               locMap.put("default", "central");
+               locMap.put("default", "");
+               retInputs.put("location_id", locMap);
 
                //set the log info
-               GetInput logD = new GetInput();
-               logD.setGet_input("log_directory");
-               TreeMap<String, Object> l = new TreeMap();
-               l.put("log_directory", logD);
-               this.setLog_info(l);
-               LinkedHashMap<String, Object> logMap = new LinkedHashMap();
-               logMap.put("type", "string");
-               logMap.put("default", "''");
-               retInputs.put("log_directory", logMap);
+               this.setLog_info(cs.getAuxilary().getLog_info());
 
                //set the replicas
                GetInput replica = new GetInput();
@@ -108,35 +99,29 @@ public class Properties {
 
                //set the docker config
                Auxilary aux = cs.getAuxilary();
-               if(aux.getPorts() != null) {
-                       retInputs = aux.createPorts(retInputs);
-               }
+//             if(aux.getPorts() != null) {
+//                     retInputs = aux.createPorts(retInputs);
+//             }
                this.setDocker_config(aux);
 
                //set the app config
                Appconfig app = new Appconfig();
-               retInputs = app.createAppconfig(retInputs, cs, override);
+               retInputs = app.createAppconfig(retInputs, cs, override, false);
                this.setApplication_config(app);
 
-               //set the tls info
-               GetInput tls = new GetInput();
-               tls.setGet_input("use_tls");
-               GetInput cert = new GetInput();
-               cert.setGet_input("cert_directory");
-               TreeMap<String, Object> tlsInfo = new TreeMap();
-               tlsInfo.put("cert_directory", cert);
-               tlsInfo.put("use_tls", tls);
-               this.setTls_info(tlsInfo);
-
-               LinkedHashMap<String, Object> certMap = new LinkedHashMap();
-               certMap.put("type", "string");
-               certMap.put("default", "''");
-               retInputs.put("cert_directory", certMap);
+               // set always_pull_image
+               this.always_pull_image = new GetInput();
+               this.always_pull_image.setGet_input("always_pull_image");
+               LinkedHashMap<String, Object> inputAlwaysPullImage = new LinkedHashMap<String, Object>();
+               inputAlwaysPullImage.put("type", "boolean");
+               inputAlwaysPullImage.put("description", "Set to true if the image should always be pulled");
+               inputAlwaysPullImage.put("default", true);
+               retInputs.put("always_pull_image", inputAlwaysPullImage);
 
-               LinkedHashMap<String, Object> useMap = new LinkedHashMap();
-               useMap.put("type", "boolean");
-               useMap.put("default", false);
-               retInputs.put("use_tls", useMap);
+               //set the tls info
+               if(cs.getAuxilary().getTls_info() != null){
+                       addTlsInfo(cs,retInputs);
+               }
 
                //set the reource config
                ResourceConfig resource = new ResourceConfig();
@@ -160,15 +145,7 @@ public class Properties {
                retInputs.put("tag_version", img);
 
                //set the log info
-               GetInput logD = new GetInput();
-               logD.setGet_input("log_directory");
-               TreeMap<String, Object> l = new TreeMap();
-               l.put("log_directory", logD);
-               this.setLog_info(l);
-               LinkedHashMap<String, Object> logMap = new LinkedHashMap();
-               logMap.put("type", "string");
-               logMap.put("default", "''");
-               retInputs.put("log_directory", logMap);
+               this.setLog_info(cs.getAuxilary().getLog_info());
 
                //set service component type
                String sType = cs.getSelf().getName();
@@ -176,24 +153,9 @@ public class Properties {
                this.setService_component_type(sType);
 
                //set the tls info
-               GetInput tls = new GetInput();
-               tls.setGet_input("use_tls");
-               GetInput cert = new GetInput();
-               cert.setGet_input("cert_directory");
-               TreeMap<String, Object> tlsInfo = new TreeMap();
-               tlsInfo.put("cert_directory", cert);
-               tlsInfo.put("use_tls", tls);
-               this.setTls_info(tlsInfo);
-
-               LinkedHashMap<String, Object> certMap = new LinkedHashMap();
-               certMap.put("type", "string");
-               certMap.put("default", "''");
-               retInputs.put("cert_directory", certMap);
-
-               LinkedHashMap<String, Object> useMap = new LinkedHashMap();
-               useMap.put("type", "boolean");
-               useMap.put("default", false);
-               retInputs.put("use_tls", useMap);
+               if(cs.getAuxilary().getTls_info() != null){
+                       addTlsInfo(cs,retInputs);
+               }
 
                //set the replicas
                GetInput replica = new GetInput();
@@ -213,34 +175,32 @@ public class Properties {
 
                //set the docker config
                Auxilary aux = cs.getAuxilary();
-               if(aux.getPorts() != null) {
-                       retInputs = aux.createPorts(retInputs);
-               }
+//             if(aux.getPorts() != null) {
+//                     retInputs = aux.createPorts(retInputs);
+//             }
                this.setDocker_config(aux);
 
                //set the appconfig
                Appconfig app = new Appconfig();
-               retInputs = app.createAppconfig(retInputs, cs, override);
+               retInputs = app.createAppconfig(retInputs, cs, override, true);
                this.setApplication_config(app);
 
                //set the stream publishes
                ArrayList<DmaapStreams> pubStreams = new ArrayList();
-               int counter = 0;
                if(cs.getStreams().getPublishes() != null) {
                        for(Publishes p: cs.getStreams().getPublishes()) {
                                if(p.getType().equals("message_router") || p.getType().equals("message router")) {
-                                       String topic = "topic" + counter;
+                                       String topic = p.getConfig_key() + "_topic";
                                        DmaapStreams mrStreams = new DmaapStreams();
                                        retInputs = mrStreams.createStreams(inps, cs, topic, p.getType(), p.getConfig_key(), p.getRoute(), 'p');
                                        pubStreams.add(mrStreams);
                                }
                                else if(p.getType().equals("data_router") || p.getType().equals("data router")){
-                                       String feed = "feed" + counter;
+                                       String feed = p.getConfig_key() + "_feed";
                                        DmaapStreams drStreams = new DmaapStreams();
                                        retInputs = drStreams.createStreams(inps, cs, feed, p.getType(), p.getConfig_key(), p.getRoute(), 'p');
                                        pubStreams.add(drStreams);
                                }
-                               counter++;
                        }
                }
 
@@ -249,18 +209,17 @@ public class Properties {
                if(cs.getStreams().getSubscribes() != null) {
                        for(Subscribes s: cs.getStreams().getSubscribes()) {
                                if(s.getType().equals("message_router") || s.getType().equals("message router")) {
-                                       String topic = "topic" + counter;
+                                       String topic = s.getConfig_key() + "_topic";
                                        DmaapStreams mrStreams = new DmaapStreams();
                                        retInputs = mrStreams.createStreams(inps, cs, topic, s.getType(), s.getConfig_key(), s.getRoute(), 's');
                                        subStreams.add(mrStreams);
                                }
                                else if(s.getType().equals("data_router") || s.getType().equals("data router")){
-                                       String feed = "feed" + counter;
+                                       String feed = s.getConfig_key() + "_feed";
                                        DmaapStreams drStreams = new DmaapStreams();
                                        retInputs = drStreams.createStreams(inps, cs, feed, s.getType(), s.getConfig_key(), s.getRoute(), 's');
                                        subStreams.add(drStreams);
                                }
-                               counter++;
                        }
                }
 
@@ -279,4 +238,18 @@ public class Properties {
 
                return retInputs;
        }
+
+       private void addTlsInfo(ComponentSpec cs, TreeMap<String, LinkedHashMap<String, Object>> retInputs) {
+               TlsInfo tlsInfo = new TlsInfo();
+               tlsInfo.setCertDirectory((String) cs.getAuxilary().getTls_info().get("cert_directory"));
+               GetInput useTLSFlag = new GetInput();
+               useTLSFlag.setGet_input("use_tls");
+               tlsInfo.setUseTls(useTLSFlag);
+               this.setTls_info(tlsInfo);
+               LinkedHashMap<String, Object> useTlsFlagInput = new LinkedHashMap<String, Object>();
+               useTlsFlagInput.put("type", "boolean");
+               useTlsFlagInput.put("description", "flag to indicate tls enable/disable");
+               useTlsFlagInput.put("default", cs.getAuxilary().getTls_info().get("use_tls"));
+               retInputs.put("use_tls", useTlsFlagInput);
+       }
 }
index 1c1cf6c..f81bf9a 100644 (file)
@@ -24,6 +24,8 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
 
+import org.onap.blueprintgenerator.core.PgaasNodeBuilder;
+import org.onap.blueprintgenerator.models.componentspec.Auxilary;
 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
@@ -34,14 +36,36 @@ import lombok.Getter; import lombok.Setter;
 @Getter @Setter
 @JsonInclude(value=Include.NON_NULL)
 public class StartInputs {
-       //private ArrayList<String> ports;
-       private GetInput envs;
+       private ArrayList<String> ports;
+       private Object envs;
 
        public TreeMap<String, LinkedHashMap<String, Object>> createOnapStartInputs(TreeMap<String, LinkedHashMap<String, Object>> inps, ComponentSpec cs){
-               TreeMap<String, LinkedHashMap<String, Object>> retInputs = new TreeMap<String, LinkedHashMap<String, Object>>();
-               retInputs = inps;
-               LinkedHashMap<String, Object> stringType  = new LinkedHashMap<String, Object>();
+               TreeMap<String, LinkedHashMap<String, Object>> retInputs = inps;
 
+               int count = 0;
+               ArrayList<String> portList = new ArrayList();
+               Auxilary aux = cs.getAuxilary();
+
+               if (aux.getPorts() != null) {
+
+                       for(Object p : aux.getPorts()) {
+                               String[] ports = p.toString().split(":");
+                               String internal
+                                               = String.format("concat: [\"%s:\", {get_input: external_port_%d}]"
+                                               , ports[0], count);
+                               portList.add(internal);
+
+                               LinkedHashMap<String, Object> portType = new LinkedHashMap();
+                               portType.put("type", "string");
+                               portType.put("default", ports[1]);
+                               retInputs.put("external_port_" + count, portType);
+
+                               count++;
+                       }
+
+               }
+
+               this.setPorts(portList);
 //             ArrayList<String> port = new ArrayList<String>();
 //             String external = "";
 //             if(cs.getAuxilary().getPorts() != null) {
@@ -73,13 +97,22 @@ public class StartInputs {
 //             }
 
                //set the envs
-               GetInput env = new GetInput();
-               env.setGet_input("envs");
-               this.setEnvs(env);
                LinkedHashMap<String, Object> eMap = new LinkedHashMap();
-               eMap.put("default", "{}");
+               if(cs.getAuxilary().getDatabases() != null){
+                       //set db env variables
+                       LinkedHashMap<String, Object> envVars = PgaasNodeBuilder.getEnvVariables(cs.getAuxilary().getDatabases());
+                       this.setEnvs(envVars);
+                       eMap.put("default", "&envs {}");
+               }
+               else {
+                       GetInput env = new GetInput();
+                       env.setGet_input("envs");
+                       this.setEnvs(env);
+                       eMap.put("default", "{}");
+               }
                retInputs.put("envs", eMap);
 
+
                return retInputs;
        }
 }
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/TlsInfo.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/TlsInfo.java
new file mode 100644 (file)
index 0000000..2130fe3
--- /dev/null
@@ -0,0 +1,37 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models.blueprint;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class TlsInfo {
+
+    @JsonProperty("cert_directory")
+    private String certDirectory;
+
+    @JsonProperty("use_tls")
+    private GetInput useTls;
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/pgaas/PgaasNode.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/pgaas/PgaasNode.java
new file mode 100644 (file)
index 0000000..35f958e
--- /dev/null
@@ -0,0 +1,35 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models.blueprint.pgaas;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.onap.blueprintgenerator.models.blueprint.Node;
+
+@Getter
+@Setter
+@NoArgsConstructor
+public class PgaasNode extends Node {
+
+    @JsonProperty("properties")
+    private PgaasNodeProperties pgaasNodeProperties;
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/pgaas/PgaasNodeProperties.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/pgaas/PgaasNodeProperties.java
new file mode 100644 (file)
index 0000000..709c66e
--- /dev/null
@@ -0,0 +1,40 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models.blueprint.pgaas;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.onap.blueprintgenerator.models.blueprint.GetInput;
+
+@Getter @Setter
+@NoArgsConstructor
+public class PgaasNodeProperties {
+
+    @JsonProperty("writerfqdn")
+    private GetInput writerfqdn;
+
+    @JsonProperty("name")
+    private GetInput name;
+
+    @JsonProperty("use_existing")
+    private boolean useExisting;
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/policy/PolicyNode.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/policy/PolicyNode.java
new file mode 100644 (file)
index 0000000..b4740df
--- /dev/null
@@ -0,0 +1,34 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models.blueprint.policy;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.onap.blueprintgenerator.models.blueprint.Node;
+
+@Getter @Setter
+@NoArgsConstructor
+public class PolicyNode extends Node {
+
+    @JsonProperty("properties")
+    private PolicyNodeProperties policyNodeProperties;
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/policy/PolicyNodeProperties.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/blueprint/policy/PolicyNodeProperties.java
new file mode 100644 (file)
index 0000000..6d23b23
--- /dev/null
@@ -0,0 +1,37 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models.blueprint.policy;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.onap.blueprintgenerator.models.blueprint.GetInput;
+
+@Getter @Setter
+@NoArgsConstructor
+public class PolicyNodeProperties {
+
+    @JsonProperty("policy_id")
+    private GetInput policyId;
+
+    @JsonProperty("policy_model_id")
+    private String policyModelId;
+}
index 01844f9..73acda8 100644 (file)
@@ -67,6 +67,15 @@ public class Auxilary {
        
        /** The healthcheck. */
        private HealthCheck healthcheck;
+
+       /**log-directory**/
+       @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
+       private TreeMap<String, Object> log_info;
+
+       /**tls-info**/
+       @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
+       private TreeMap<String, Object> tls_info;
+
        /** The volumes. */
        private Volumes[] volumes;
 
@@ -74,6 +83,7 @@ public class Auxilary {
        private Policy policy;
 
        /** The ports. */
+       @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
        private ArrayList<Object> ports;
 
        /** The reconfigs. */
@@ -84,35 +94,35 @@ public class Auxilary {
        private TreeMap<String, String> databases;
 
 
-       public TreeMap<String, LinkedHashMap<String, Object>> createPorts(TreeMap<String, LinkedHashMap<String, Object>> inps) {
-               TreeMap<String, LinkedHashMap<String, Object>> retInputs = inps;
-               LinkedHashMap<String, Object> portType = new LinkedHashMap();
-               portType.put("type", "string");
-
-               ArrayList<Object> ports = new ArrayList();
-               String external = "";
-               boolean foundPort = false;
-               for(Object o: this.getPorts()) {
-                       String internal = "";
-                       String p = o.toString();
-                       for(int i = 0; i < p.length(); i++) {
-                               if(p.charAt(i) == ':') {
-                                       internal = '"' + internal + '"';
-                                       internal = "concat: ['" + internal + "', {get_input: external_port}]"; 
-                                       ports.add(internal);
-                               }
-                               if(p.charAt(i) == ':' && !foundPort) {
-                                       external = p.substring(i);
-                                       portType.put("default", external);
-                                       retInputs.put("external_port", portType);
-
-                               }
-                               internal = internal + p.charAt(i);
-
-                       }
-               }
-
-               this.setPorts(ports);
-               return retInputs;
-       }
+//     public TreeMap<String, LinkedHashMap<String, Object>> createPorts(TreeMap<String, LinkedHashMap<String, Object>> inps) {
+//             TreeMap<String, LinkedHashMap<String, Object>> retInputs = inps;
+//             LinkedHashMap<String, Object> portType = new LinkedHashMap();
+//             portType.put("type", "string");
+//
+//             ArrayList<Object> ports = new ArrayList();
+//             String external = "";
+//             boolean foundPort = false;
+//             for(Object o: this.getPorts()) {
+//                     String internal = "";
+//                     String p = o.toString();
+//                     for(int i = 0; i < p.length(); i++) {
+//                             if(p.charAt(i) == ':') {
+//                                     internal = '"' + internal + '"';
+//                                     internal = "concat: ['" + internal + "', {get_input: external_port}]";
+//                                     ports.add(internal);
+//                             }
+//                             if(p.charAt(i) == ':' && !foundPort) {
+//                                     external = p.substring(i);
+//                                     portType.put("default", external);
+//                                     retInputs.put("external_port", portType);
+//
+//                             }
+//                             internal = internal + p.charAt(i);
+//
+//                     }
+//             }
+//
+//             this.setPorts(ports);
+//             return retInputs;
+//     }
 }
\ No newline at end of file
index b6bc0a1..3876b53 100644 (file)
@@ -22,23 +22,17 @@ package org.onap.blueprintgenerator.models.componentspec;
 
 import java.io.File;
 import java.io.IOException;
-import java.util.Map;
-
 
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
 import lombok.Getter; import lombok.Setter;
 import lombok.NoArgsConstructor;
+import org.onap.blueprintgenerator.models.componentspec.policy_info.PolicyInfo;
 
 // TODO: Auto-generated Javadoc
 /**
@@ -90,6 +84,9 @@ public class ComponentSpec {
        
        /** The auxilary. */
        private Auxilary auxilary;
+
+       @JsonProperty("policy_info")
+       private PolicyInfo policyInfo;
        
        /** The artifacts. */
        private Artifacts[] artifacts;
@@ -119,6 +116,7 @@ public class ComponentSpec {
                this.setParameters(cs.getParameters());
                this.setServices(cs.getServices());
                this.setStreams(cs.getStreams());
+               this.setPolicyInfo(cs.getPolicyInfo());
        }
 
 
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/policy_info/PolicyInfo.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/policy_info/PolicyInfo.java
new file mode 100644 (file)
index 0000000..da746a7
--- /dev/null
@@ -0,0 +1,35 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019-2020 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=========================================================
+
+ */
+package org.onap.blueprintgenerator.models.componentspec.policy_info;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter @Setter
+@NoArgsConstructor
+public class PolicyInfo {
+
+    @JsonProperty("policy")
+    private List<TypePolicy> typePolicyList;
+}
diff --git a/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/policy_info/TypePolicy.java b/mod/bpgenerator/src/main/java/org/onap/blueprintgenerator/models/componentspec/policy_info/TypePolicy.java
new file mode 100644 (file)
index 0000000..038c601
--- /dev/null
@@ -0,0 +1,36 @@
+/**============LICENSE_START=======================================================
+ org.onap.dcae
+ ================================================================================
+ Copyright (c) 2019-2020 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=========================================================
+
+ */
+
+package org.onap.blueprintgenerator.models.componentspec.policy_info;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter @Setter
+@NoArgsConstructor
+public class TypePolicy {
+
+    private String node_label;
+    private String policy_id;
+    private String policy_model_id;
+
+}
index d3cff67..21eabf0 100644 (file)
 
 package org.onap.blueprintgenerator.models.dmaapbp;
 
-import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
 
+import org.onap.blueprintgenerator.core.PgaasNodeBuilder;
+import org.onap.blueprintgenerator.core.PolicyNodeBuilder;
 import org.onap.blueprintgenerator.models.blueprint.Blueprint;
 import org.onap.blueprintgenerator.models.blueprint.Imports;
-import org.onap.blueprintgenerator.models.blueprint.Interfaces;
 import org.onap.blueprintgenerator.models.blueprint.Node;
-import org.onap.blueprintgenerator.models.blueprint.Properties;
 import org.onap.blueprintgenerator.models.componentspec.ComponentSpec;
 import org.onap.blueprintgenerator.models.componentspec.Publishes;
 import org.onap.blueprintgenerator.models.componentspec.Subscribes;
@@ -68,41 +67,48 @@ public class DmaapBlueprint extends Blueprint{
                //create and add the topic/feed nodes
 
                //go through the streams publishes
-               int counter = 0;
                if(cs.getStreams().getPublishes() != null) {
                        for(Publishes p: cs.getStreams().getPublishes()) {
                                if(p.getType().equals("message_router") || p.getType().equals("message router")) {
-                                       String topic = "topic" + counter;
+                                       String topic = p.getConfig_key() + "_topic";
                                        DmaapNode topicNode = new DmaapNode();
                                        inps = topicNode.createTopicNode(cs, inps, topic);
                                        nodeTemplate.put(topic, topicNode);
                                } else if(p.getType().equals("data_router") || p.getType().equals("data router")) {
-                                       String feed = "feed" + counter;
+                                       String feed = p.getConfig_key() + "_feed";
                                        DmaapNode feedNode = new DmaapNode();
                                        inps = feedNode.createFeedNode(cs, inps, feed);
                                        nodeTemplate.put(feed, feedNode);
                                }
-                               counter++;
                        }
                }
                //go through the stream subscribes
                if(cs.getStreams().getSubscribes() != null) {
                        for(Subscribes s: cs.getStreams().getSubscribes()) {
                                if(s.getType().equals("message_router") || s.getType().equals("message router")) {
-                                       String topic = "topic" + counter;
+                                       String topic = s.getConfig_key() + "_topic";
                                        DmaapNode topicNode = new DmaapNode();
                                        inps = topicNode.createTopicNode(cs, inps, topic);
                                        nodeTemplate.put(topic, topicNode);
                                } else if(s.getType().equals("data_router") || s.getType().equals("data router")) {
-                                       String feed = "feed" + counter;
+                                       String feed = s.getConfig_key() + "_feed";
                                        DmaapNode feedNode = new DmaapNode();
                                        inps = feedNode.createFeedNode(cs, inps, feed);
                                        nodeTemplate.put(feed, feedNode);
                                }
-                               counter++;
                        }
                }
 
+               //if present in component spec, populate policyNodes information in the blueprint
+               if(cs.getPolicyInfo() != null){
+                       PolicyNodeBuilder.addPolicyNodesAndInputs(cs, nodeTemplate, inps);
+               }
+
+               //if present in component spec, populate pgaasNodes information in the blueprint
+               if(cs.getAuxilary().getDatabases() != null){
+                       PgaasNodeBuilder.addPgaasNodesAndInputs(cs, nodeTemplate, inps);
+               }
+
                bp.setNode_templates(nodeTemplate);
 
                bp.setInputs(inps);
index bfa7ae9..6c74347 100644 (file)
@@ -24,6 +24,8 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
 
+import org.onap.blueprintgenerator.core.PgaasNodeBuilder;
+import org.onap.blueprintgenerator.core.PolicyNodeBuilder;
 import org.onap.blueprintgenerator.models.blueprint.GetInput;
 import org.onap.blueprintgenerator.models.blueprint.Interfaces;
 import org.onap.blueprintgenerator.models.blueprint.Node;
@@ -71,19 +73,17 @@ public class DmaapNode extends Node{
                ArrayList<LinkedHashMap<String, String>> rets = new ArrayList();
 
                //go through the streams publishes
-               int counter = 0;
                if(cs.getStreams().getPublishes() != null) {
                        for(Publishes p: cs.getStreams().getPublishes()) {
                                LinkedHashMap<String, String> pubRelations = new LinkedHashMap();
                                if(p.getType().equals("message_router") || p.getType().equals("message router")) {
                                        pubRelations.put("type", "ccsdk.relationships.publish_events");
-                                       pubRelations.put("target", "topic" + counter);
+                                       pubRelations.put("target", p.getConfig_key() + "_topic");
                                } else if(p.getType().equals("data_router") || p.getType().equals("data router")) {
                                        pubRelations.put("type", "ccsdk.relationships.publish_files");
-                                       pubRelations.put("target", "feed" + counter);
+                                       pubRelations.put("target", p.getConfig_key() + "_feed");
                                }
                                rets.add(pubRelations);
-                               counter++;
                        }
                }
                //go through the stream subscribes
@@ -92,15 +92,26 @@ public class DmaapNode extends Node{
                                LinkedHashMap<String, String> subRelations = new LinkedHashMap();
                                if(s.getType().equals("message_router") || s.getType().equals("message router")) {
                                        subRelations.put("type", "ccsdk.relationships.subscribe_to_events");
-                                       subRelations.put("target", "topic" + counter);
+                                       subRelations.put("target", s.getConfig_key() + "_topic");
                                } else if(s.getType().equals("data_router") || s.getType().equals("data router")) {
                                        subRelations.put("type", "ccsdk.relationships.subscribe_to_files");
-                                       subRelations.put("target", "feed" + counter);
+                                       subRelations.put("target", s.getConfig_key() + "_feed");
                                }
                                rets.add(subRelations);
-                               counter++;
                        }
                }
+
+               //add relationship for policy if exist
+               if(cs.getPolicyInfo() != null){
+                       ArrayList<LinkedHashMap<String, String>> policyRelationshipsList = PolicyNodeBuilder.getPolicyRelationships(cs);
+                       rets.addAll(policyRelationshipsList);
+               }
+
+               //add relationships and env_variables for pgaas dbs if exist
+               if(cs.getAuxilary().getDatabases() != null){
+                       ArrayList<LinkedHashMap<String, String>> pgaasRelationshipsList = PgaasNodeBuilder.getPgaasNodeRelationships(cs);
+                       rets.addAll(pgaasRelationshipsList);
+               }
                
                this.setRelationships(rets);
 
index 1640a6e..b26d45d 100644 (file)
@@ -46,6 +46,10 @@ public class DmaapStreams {
        private GetInput username;
        private GetInput password;
        //private GetInput delivery_url;
+
+       private GetInput privileged;
+       private GetInput decompress;
+
        private String route;
        private String scheme;
 
@@ -81,6 +85,18 @@ public class DmaapStreams {
                                this.setPassword(password);
                                retInputs.put(key + "_" + name + "_password", stringType);
 
+                               //set privileged
+                               GetInput priviliged = new GetInput();
+                               priviliged.setGet_input(key + "_" + name + "_priviliged");
+                               this.setPrivileged(priviliged);
+                               retInputs.put(key + "_" + name + "_priviliged", stringType);
+
+                               //set decompress
+                               GetInput decompress = new GetInput();
+                               decompress.setGet_input(key + "_" + name + "_decompress");
+                               this.setDecompress(decompress);
+                               retInputs.put(key + "_" + name + "_decompress", stringType);
+
                                this.setRoute(route);
                                this.setScheme("https");
                        }
index 8342020..c0ef8b3 100644 (file)
@@ -24,6 +24,8 @@ import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
 
+import org.onap.blueprintgenerator.core.PgaasNodeBuilder;
+import org.onap.blueprintgenerator.core.PolicyNodeBuilder;
 import org.onap.blueprintgenerator.models.blueprint.Blueprint;
 import org.onap.blueprintgenerator.models.blueprint.Imports;
 import org.onap.blueprintgenerator.models.blueprint.Node;
@@ -69,9 +71,20 @@ public class OnapBlueprint extends Blueprint{
                nodeTemplate.put(nodeName, node);
                this.setNode_templates(nodeTemplate);
 
+               //if present in component spec, populate policyNode information in the blueprint
+               if(cs.getPolicyInfo() != null){
+                       PolicyNodeBuilder.addPolicyNodesAndInputs(cs, nodeTemplate, inputs);
+               }
+
+               //if present in component spec, populate pgaasNodes information in the blueprint
+               if(cs.getAuxilary().getDatabases() != null){
+                       PgaasNodeBuilder.addPgaasNodesAndInputs(cs, nodeTemplate, inputs);
+               }
+
                //set the inputs
                this.setInputs(inputs);
 
+
                Blueprint bp = new Blueprint();
                bp.setImports(this.getImports());
                bp.setInputs(this.getInputs());
index 2b0b8c0..a3d8e3e 100644 (file)
 
 package org.onap.blueprintgenerator.models.onapbp;
 
+import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.TreeMap;
 
+import org.onap.blueprintgenerator.core.PgaasNodeBuilder;
+import org.onap.blueprintgenerator.core.PolicyNodeBuilder;
 import org.onap.blueprintgenerator.models.blueprint.Interfaces;
 import org.onap.blueprintgenerator.models.blueprint.Node;
 import org.onap.blueprintgenerator.models.blueprint.Properties;
@@ -47,6 +50,8 @@ import lombok.NoArgsConstructor;
 public class OnapNode extends Node{
        private TreeMap<String, Interfaces> interfaces;
        private Properties properties;
+       private ArrayList<LinkedHashMap<String, String>> relationships;
+
        public TreeMap<String, LinkedHashMap<String, Object>> createOnapNode(TreeMap<String, LinkedHashMap<String, Object>> inps, ComponentSpec cs, String override) {
                TreeMap<String, LinkedHashMap<String, Object>> retInputs = new TreeMap<String, LinkedHashMap<String, Object>>();
                retInputs = inps;
@@ -61,6 +66,23 @@ public class OnapNode extends Node{
                //set the type
                this.setType("dcae.nodes.ContainerizedPlatformComponent");
 
+               //create and set the relationships
+               ArrayList<LinkedHashMap<String, String>> rets = new ArrayList();
+
+               //add relationship for policy if exist
+               if(cs.getPolicyInfo() != null){
+                       ArrayList<LinkedHashMap<String, String>> policyRelationshipsList = PolicyNodeBuilder.getPolicyRelationships(cs);
+                       rets.addAll(policyRelationshipsList);
+               }
+
+               //add relationships and env_variables for pgaas dbs if exist
+               if(cs.getAuxilary().getDatabases() != null){
+                       ArrayList<LinkedHashMap<String, String>> pgaasRelationshipsList = PgaasNodeBuilder.getPgaasNodeRelationships(cs);
+                       rets.addAll(pgaasRelationshipsList);
+               }
+
+               this.setRelationships(rets);
+
                //set the properties
                Properties props = new Properties();
                retInputs = props.createOnapProperties(retInputs, cs, override);
index 755adf7..7d6815b 100644 (file)
@@ -1,6 +1,6 @@
 major=1
-minor=2
-patch=1
+minor=3
+patch=0
 base_version=${major}.${minor}.${patch}
 release_version=${base_version}
 snapshot_version=${base_version}-SNAPSHOT