diff --git a/setup.cfg b/setup.cfg index 71a68a1d..44f632ce 100644 --- a/setup.cfg +++ b/setup.cfg @@ -112,6 +112,13 @@ openstack.tackerclient.v2 = vnflcm_terminate = tackerclient.osc.v1.vnflcm.vnflcm:TerminateVnfLcm vnflcm_change-vnfpkg = tackerclient.osc.v1.vnflcm.vnflcm:ChangeVnfPkgVnfLcm vnflcm_delete = tackerclient.osc.v1.vnflcm.vnflcm:DeleteVnfLcm + vnflcm_heal = tackerclient.osc.v1.vnflcm.vnflcm:HealVnfLcm + vnflcm_update = tackerclient.osc.v1.vnflcm.vnflcm:UpdateVnfLcm + vnflcm_scale = tackerclient.osc.v1.vnflcm.vnflcm:ScaleVnfLcm + vnflcm_change-ext-conn = tackerclient.osc.v1.vnflcm.vnflcm:ChangeExtConnVnfLcm + vnflcm_op_rollback = tackerclient.osc.v1.vnflcm.vnflcm_op_occs:RollbackVnfLcmOp + vnflcm_op_fail = tackerclient.osc.v1.vnflcm.vnflcm_op_occs:FailVnfLcmOp + vnflcm_op_retry = tackerclient.osc.v1.vnflcm.vnflcm_op_occs:RetryVnfLcmOp vnflcm_op_list = tackerclient.osc.v1.vnflcm.vnflcm_op_occs:ListVnfLcmOp vnflcm_op_show = tackerclient.osc.v1.vnflcm.vnflcm_op_occs:ShowVnfLcmOp vnflcm_versions = tackerclient.osc.common.vnflcm.vnflcm_versions:VnfLcmVersions diff --git a/tackerclient/osc/v1/vnflcm/samples/heal_vnf_instance_param_sample.json b/tackerclient/osc/v1/vnflcm/samples/heal_vnf_instance_param_sample.json new file mode 100644 index 00000000..9efb89b3 --- /dev/null +++ b/tackerclient/osc/v1/vnflcm/samples/heal_vnf_instance_param_sample.json @@ -0,0 +1,3 @@ +{ + "additionalParams": {"all": true} +} diff --git a/tackerclient/osc/v1/vnflcm/vnflcm.py b/tackerclient/osc/v1/vnflcm/vnflcm.py index 2dd497eb..06a0a10c 100644 --- a/tackerclient/osc/v1/vnflcm/vnflcm.py +++ b/tackerclient/osc/v1/vnflcm/vnflcm.py @@ -241,6 +241,7 @@ class HealVnfLcm(command.Command): usage_message = ('''%(prog)s [-h] [--cause CAUSE] [--vnfc-instance ''' '''[ ...]] + [--additional-param-file ] -- ''') parser.usage = usage_message parser.add_argument( @@ -256,6 +257,11 @@ class HealVnfLcm(command.Command): nargs="+", help=_("List of VNFC instances requiring a healing action.") ) + parser.add_argument( + '--additional-param-file', + metavar="", + help=_("Additional parameters passed by the NFVO as input " + "to the healing process.")) return parser def args2body(self, parsed_args): @@ -264,6 +270,8 @@ class HealVnfLcm(command.Command): body['cause'] = parsed_args.cause if parsed_args.vnfc_instance: body['vnfcInstanceId'] = parsed_args.vnfc_instance + if parsed_args.additional_param_file: + body.update(jsonfile2body(parsed_args.additional_param_file)) return body diff --git a/tackerclient/tests/unit/osc/v1/test_vnflcm.py b/tackerclient/tests/unit/osc/v1/test_vnflcm.py index f5d64c62..4e2cd857 100644 --- a/tackerclient/tests/unit/osc/v1/test_vnflcm.py +++ b/tackerclient/tests/unit/osc/v1/test_vnflcm.py @@ -288,6 +288,9 @@ class TestHealVnfLcm(TestVnfLcm): self.heal_vnf_lcm = vnflcm.HealVnfLcm( self.app, self.app_args, cmd_name='vnflcm heal') + _heal_sample_param_file = ("./tackerclient/osc/v1/vnflcm/samples/" + "heal_vnf_instance_param_sample.json") + @ddt.data((['--cause', 'test-cause', "--vnfc-instance", 'vnfc-id-1', 'vnfc-id-2'], [('cause', 'test-cause'), @@ -296,6 +299,8 @@ class TestHealVnfLcm(TestVnfLcm): [('cause', 'test-cause')]), (["--vnfc-instance", 'vnfc-id-1', 'vnfc-id-2'], [('vnfc_instance', ['vnfc-id-1', 'vnfc-id-2'])]), + (["--additional-param-file", _heal_sample_param_file], + [('additional_param_file', _heal_sample_param_file)]), ([], [])) @ddt.unpack def test_take_action(self, arglist, verifylist): @@ -340,6 +345,25 @@ class TestHealVnfLcm(TestVnfLcm): self.heal_vnf_lcm.take_action, parsed_args) + def test_take_action_param_file_not_exists(self): + vnf_instance = vnflcm_fakes.vnf_instance_response() + sample_param_file = "./not_exists.json" + arglist = [vnf_instance['id'], + '--additional-param-file', sample_param_file] + verifylist = [('vnf_instance', vnf_instance['id']), + ('additional_param_file', sample_param_file)] + + # command param + parsed_args = self.check_parser(self.heal_vnf_lcm, arglist, + verifylist) + + ex = self.assertRaises(exceptions.InvalidInput, + self.heal_vnf_lcm.take_action, parsed_args) + + expected_msg = ("Invalid input: File %s does not exist " + "or user does not have read privileges to it") + self.assertEqual(expected_msg % sample_param_file, str(ex)) + @ddt.ddt class TestTerminateVnfLcm(TestVnfLcm):