diff --git a/tackerclient/tacker/v1_0/nfvo/vnffg.py b/tackerclient/tacker/v1_0/nfvo/vnffg.py index 7c3a943f..46c4b369 100644 --- a/tackerclient/tacker/v1_0/nfvo/vnffg.py +++ b/tackerclient/tacker/v1_0/nfvo/vnffg.py @@ -165,6 +165,10 @@ class UpdateVNFFG(tackerV10.UpdateCommand): resource = _VNFFG def add_known_arguments(self, parser): + parser.add_argument( + '--vnffgd-template', + help=_('VNFFGD file to update VNFFG') + ) parser.add_argument( '--vnf-mapping', help=_('List of logical VNFD name to VNF instance name mapping. ' @@ -176,7 +180,8 @@ class UpdateVNFFG(tackerV10.UpdateCommand): help=_('Should a reverse path be created for the NFP')) def args2body(self, parsed_args): - body = {self.resource: {}} + args = {} + body = {self.resource: args} tacker_client = self.get_client() tacker_client.format = parsed_args.request_format @@ -192,6 +197,17 @@ class UpdateVNFFG(tackerV10.UpdateCommand): parsed_args.vnf_mapping = _vnf_mapping + if parsed_args.vnffgd_template: + with open(parsed_args.vnffgd_template) as f: + template = f.read() + try: + args['vnffgd_template'] = yaml.load( + template, Loader=yaml.SafeLoader) + except yaml.YAMLError as e: + raise exceptions.InvalidInput(e) + if not args['vnffgd_template']: + raise exceptions.InvalidInput('The vnffgd template is empty') + tackerV10.update_dict(parsed_args, body[self.resource], ['tenant_id', 'vnf_mapping', 'symmetrical']) return body diff --git a/tackerclient/tests/unit/vm/samples/vnffg_update_file.yaml b/tackerclient/tests/unit/vm/samples/vnffg_update_file.yaml new file mode 100644 index 00000000..3f8af8f6 --- /dev/null +++ b/tackerclient/tests/unit/vm/samples/vnffg_update_file.yaml @@ -0,0 +1 @@ +abcxyz \ No newline at end of file diff --git a/tackerclient/tests/unit/vm/test_cli10_vnffg.py b/tackerclient/tests/unit/vm/test_cli10_vnffg.py index fdc380ef..6c5c7b39 100644 --- a/tackerclient/tests/unit/vm/test_cli10_vnffg.py +++ b/tackerclient/tests/unit/vm/test_cli10_vnffg.py @@ -16,6 +16,7 @@ import sys +from tackerclient.common import utils from tackerclient.tacker.v1_0.nfvo import vnffg from tackerclient.tests.unit import test_cli10 @@ -94,11 +95,22 @@ class CLITestV10VmVNFFGJSON(test_cli10.CLITestV10Base): def test_update_vnffg(self): cmd = vnffg.UpdateVNFFG(test_cli10.MyApp(sys.stdout), None) my_id = 'my-id' - key = 'new_key' - value = 'new-value' + update_vnffg = utils.get_file_path( + 'tests/unit/vm/samples/vnffg_update_file.yaml') + vnf_mapping = 'VNFD1:VNF1' + args = [ + my_id, + '--vnf-mapping', vnf_mapping, + '--vnffgd-template', str(update_vnffg), + '--symmetrical' + ] + extra_fields = { + "vnf_mapping": {"VNFD1": "VNF1"}, + "vnffgd_template": "abcxyz", + "symmetrical": True + } self._test_update_resource(self._RESOURCE, cmd, my_id, - [my_id, '--%s' % key, value], - {'symmetrical': False, key: value}, + args, extra_fields, get_client_called_count=2) def test_delete_vnffg(self):