Merge "Integration test for metrics + bug fix"
diff --git a/n2vc/vnf.py b/n2vc/vnf.py
index d3ad90c..f642ead 100644
--- a/n2vc/vnf.py
+++ b/n2vc/vnf.py
@@ -587,7 +587,50 @@
if parameter['value'] == "<rw_mgmt_ip>":
params[param] = str(values[parameter['value']])
else:
- params[param] = str(parameter['value'])
+ """
+ The Juju API uses strictly typed data-types, so we must make
+ sure the parameters from the VNFD match the appropriate type.
+
+ The honus will still be on the operator, to make sure the
+ data-type in the VNFD matches the one in the charm. N2VC will
+ raise N2VCPrimitiveExecutionFailed when there is a mismatch.
+
+ There are three data types supported by the YANG model:
+ # - STRING
+ # - INTEGER
+ # - BOOLEAN
+
+ Each parameter will look like this:
+ {
+ 'seq': '3',
+ 'name': 'testint',
+ 'parameter': [
+ {
+ 'name': 'interval',
+ 'data-type': 'INTEGER',
+ 'value': 20
+ }
+ ]
+ }
+ """
+
+ if 'value' in parameter:
+ # String is the default format
+ val = str(parameter['value'])
+
+ # If the data-type is explicitly set, cast to that type.
+ if 'data-type' in parameter:
+ dt = parameter['data-type'].upper()
+ if dt == "INTEGER":
+ val = int(val)
+
+ elif dt == "BOOLEAN":
+ if val in ['true', 'false', '0', '1']:
+ val = True
+ else:
+ val = False
+
+ params[param] = val
return params
def _get_config_from_yang(self, config_primitive, values):
diff --git a/setup.py b/setup.py
index a4cceb1..1450a15 100644
--- a/setup.py
+++ b/setup.py
@@ -26,6 +26,7 @@
'pyyaml>=3.0,<4.0',
'theblues>=0.3.8,<1.0',
'websockets>=4.0,<5.0',
+ 'paramiko',
],
include_package_data=True,
maintainer='',
diff --git a/tests/test_primitive_non-string_parameter.py b/tests/test_primitive_non-string_parameter.py
index bae8379..9a2d5ad 100644
--- a/tests/test_primitive_non-string_parameter.py
+++ b/tests/test_primitive_non-string_parameter.py
@@ -89,20 +89,25 @@
name: config
parameter:
- name: ssh-hostname
+ data-type: STRING
value: <rw_mgmt_ip>
- name: ssh-username
+ data-type: STRING
value: ubuntu
- name: ssh-password
+ data-type: STRING
value: ubuntu
- seq: '2'
name: touch
parameter:
- name: filename
+ data-type: STRING
value: '/home/ubuntu/first-touch-dataVM'
- seq: '3'
name: testint
parameter:
- name: interval
+ data-type: INTEGER
value: 20
config-primitive:
- name: touch