diff options
4 files changed, 128 insertions, 9 deletions
diff --git a/docs/parser_docs/policy2tosca/policy2tosca.rst b/docs/parser_docs/policy2tosca/policy2tosca.rst new file mode 100644 index 0000000..fa238b2 --- /dev/null +++ b/docs/parser_docs/policy2tosca/policy2tosca.rst @@ -0,0 +1,87 @@ +.. This work is licensed under a Creative Commons Attribution 4.0 International License. +.. http://creativecommons.org/licenses/by/4.0 + +=================== +Parser POLICY2TOSCA +=================== + +Overview +======== + +Parser is an open source project and licensed under Apache 2. Parser will help +to provide a tooling mechanism, by parsing Telecom operators’ VNF descriptors +(YANG templates) into TOSCA templates and then further translate TOSCA +templates into certain common templates, which could be used in IaaS orchestration +projects like OpenStack Heat. + +Prerequisites +============= + +Parser - POLICY2TOSCA requires the following to be installed. + +1. cliff +-------- + +Install cliff with the following links. +:: +- `install <http://docs.openstack.org/developer/cliff/install.html>` +or +- `demoapp <http://docs.openstack.org/developer/cliff/demoapp.html>` + +Installation +============================ + +Please follow the below installation steps to install parser - POLICY2TOSCA. + +Step 1: Clone the parser project. + +.. code-block:: bash + + git clone https://gerrit.opnfv.org/gerrit/parser + +Step 2: Install the policy2tosca module. + +.. code-block:: bash + + cd parser/policy2tosca + python setup.py install + +Execution +=========================== + +Step 1: To see a list of commands available. + +.. code-block:: bash + + policy2tosca --help + +Step 2: To see help for an individual command, include the command name on the command line + +.. code-block:: bash + + policy2tosca help <service> + +Step 3: To inject/remove policy types/policy definitions provide the TOSCA file as input to policy2tosca command line. + +.. code-block:: bash + + policy2tosca <service> [arguments] + +Example: + +.. code-block:: bash + + policy2tosca add-definition --policy_name rule2 --policy_type tosca.policies.Placement.Geolocation --description "test description" --properties region:us-north-1,region:us-north-2,min_inst:2 --targets VNF2,VNF4 --metadata "map of strings" --triggers "1,2,3,4" --source example.yaml + + +Step 4: Verify the TOSCA YAMl updated with the injection/removal executed. + +.. code-block:: bash + + cat "<source tosca file>" + +Example: + +.. code-block:: bash + + cat example_tosca.yaml diff --git a/tosca2heat/heat-translator/translator/hot/translate_node_templates.py b/tosca2heat/heat-translator/translator/hot/translate_node_templates.py index f32d42b..4dd9556 100644 --- a/tosca2heat/heat-translator/translator/hot/translate_node_templates.py +++ b/tosca2heat/heat-translator/translator/hot/translate_node_templates.py @@ -533,14 +533,20 @@ class TranslateNodeTemplates(object): def _get_attachment_node(self, node, suffix, volume_name): attach = False ntpl = self.nodetemplates - for key, value in node.relationships.items(): - if key.is_derived_from('tosca.relationships.AttachesTo'): - if value.is_derived_from('tosca.nodes.BlockStorage'): + for key_r, value_n in node.relationships.items(): + if key_r.is_derived_from('tosca.relationships.AttachesTo'): + if value_n.is_derived_from('tosca.nodes.BlockStorage'): attach = True if attach: relationship_tpl = None for req in node.requirements: for key, val in req.items(): + if isinstance(val, dict): + if value_n.name != val.get('node'): + continue + else: + if value_n.name != val: + continue attach = val relship = val.get('relationship') for rkey, rval in val.items(): diff --git a/tosca2heat/heat-translator/translator/tests/data/hot_output/hot_nfv_sample.yaml b/tosca2heat/heat-translator/translator/tests/data/hot_output/hot_nfv_sample.yaml index d66569d..79750d4 100644 --- a/tosca2heat/heat-translator/translator/tests/data/hot_output/hot_nfv_sample.yaml +++ b/tosca2heat/heat-translator/translator/tests/data/hot_output/hot_nfv_sample.yaml @@ -8,23 +8,38 @@ resources: VDU1: type: OS::Nova::Server properties: - flavor: m1.medium + flavor: m1.tiny image: rhel-6.5-test-image networks: - port: { get_resource: CP1 } user_data_format: SOFTWARE_CONFIG depends_on: - VDU2 + - BlockStorage VDU2: type: OS::Nova::Server properties: - flavor: m1.medium + flavor: m1.tiny image: rhel-6.5-test-image networks: - port: { get_resource: CP2 } user_data_format: SOFTWARE_CONFIG + BlockStorage: + type: OS::Cinder::Volume + properties: + size: 1 + + tosca.relationships.attachesto_1: + type: OS::Cinder::VolumeAttachment + properties: + instance_uuid: + get_resource: VDU1 + mountpoint: /dev/vdb1 + volume_id: + get_resource: BlockStorage + CP1: type: OS::Neutron::Port properties: diff --git a/tosca2heat/heat-translator/translator/tests/data/test_tosca_nfv_sample.yaml b/tosca2heat/heat-translator/translator/tests/data/test_tosca_nfv_sample.yaml index e5c8d3c..5803bd2 100644 --- a/tosca2heat/heat-translator/translator/tests/data/test_tosca_nfv_sample.yaml +++ b/tosca2heat/heat-translator/translator/tests/data/test_tosca_nfv_sample.yaml @@ -10,8 +10,8 @@ topology_template: capabilities: host: properties: - num_cpus: 2 - disk_size: 10 GB + num_cpus: 1 + disk_size: 1 GB mem_size: 512 MB # Guest Operating System properties os: @@ -23,14 +23,25 @@ topology_template: version: 6.5 requirements: - high_availability: VDU2 + - local_storage: + node: BlockStorage + relationship: + type: tosca.relationships.AttachesTo + properties: + location: /dev/vdb1 + + BlockStorage: + type: tosca.nodes.BlockStorage + properties: + size: 1 GB VDU2: type: tosca.nodes.nfv.VDU capabilities: host: properties: - num_cpus: 2 - disk_size: 10 GB + num_cpus: 1 + disk_size: 1 GB mem_size: 512 MB # Guest Operating System properties os: |