From 1dedfd7305a62c8c0a2c2454d2ad88241596b104 Mon Sep 17 00:00:00 2001
From: Sridhar Ramaswamy <srics.r@gmail.com>
Date: Fri, 20 Jan 2017 22:07:10 +0000
Subject: [PATCH] Deprecate direct YAML input in tackerclient

Starting from Ocata tacker payloads will only accept
YAML dict for config and param payload values. Hence
remove the warning when something other than YAML dict
is received by the client. Such a CLI input is no longer
make sense. So, starting Ocata deprecate all direct
YAML input and remove it in Pike.

Change-Id: I03f3ac405e92d7e9fa69fd2b2761c243456fd7e8
Partial-Bug: 1656416
---
 tackerclient/tacker/v1_0/nfvo/vnffgd.py |  8 +++++++-
 tackerclient/tacker/v1_0/vnfm/vnf.py    | 16 ++++++++--------
 tackerclient/tacker/v1_0/vnfm/vnfd.py   | 17 ++++++++++-------
 3 files changed, 25 insertions(+), 16 deletions(-)

diff --git a/tackerclient/tacker/v1_0/nfvo/vnffgd.py b/tackerclient/tacker/v1_0/nfvo/vnffgd.py
index add54a80..d65fb184 100644
--- a/tackerclient/tacker/v1_0/nfvo/vnffgd.py
+++ b/tackerclient/tacker/v1_0/nfvo/vnffgd.py
@@ -16,6 +16,7 @@ import yaml
 
 from oslo_serialization import jsonutils
 
+from tackerclient.common import utils
 from tackerclient.i18n import _
 from tackerclient.tacker import v1_0 as tackerV10
 
@@ -43,7 +44,7 @@ class CreateVNFFGD(tackerV10.CreateCommand):
     def add_known_arguments(self, parser):
         group = parser.add_mutually_exclusive_group(required=True)
         group.add_argument('--vnffgd-file', help=_('Specify VNFFGD file'))
-        group.add_argument('--vnffgd', help=_('Specify VNFFGD'))
+        group.add_argument('--vnffgd', help=_('Specify VNFFGD (DEPRECATED)'))
         parser.add_argument(
             'name', metavar='NAME',
             help=_('Set a name for the VNFFGD'))
@@ -58,6 +59,11 @@ class CreateVNFFGD(tackerV10.CreateCommand):
                 vnffgd = yaml.safe_load(f.read())
                 body[self.resource]['template'] = {'vnffgd': vnffgd}
         if parsed_args.vnffgd:
+            # TODO(sridhar_ram): Only file based input supported starting
+            #       Ocata, remove all direct inputs in Pike
+            utils.deprecate_warning(what="Direct VNFFGD template input",
+                                    as_of="O",
+                                    remove_in=1)
             body[self.resource]['template'] = {
                 'vnffgd': yaml.safe_load(parsed_args.vnffgd)}
         tackerV10.update_dict(parsed_args, body[self.resource],
diff --git a/tackerclient/tacker/v1_0/vnfm/vnf.py b/tackerclient/tacker/v1_0/vnfm/vnf.py
index a8c542df..af7b1ac7 100644
--- a/tackerclient/tacker/v1_0/vnfm/vnf.py
+++ b/tackerclient/tacker/v1_0/vnfm/vnf.py
@@ -75,7 +75,7 @@ class CreateVNF(tackerV10.CreateCommand):
             help=_('YAML file with VNF configuration'))
         parser.add_argument(
             '--config',
-            help=_('Specify config yaml data'))
+            help=_('Specify config yaml data (DEPRECATED)'))
         parser.add_argument(
             '--param-file',
             help=_('Specify parameter yaml file'))
@@ -90,14 +90,16 @@ class CreateVNF(tackerV10.CreateCommand):
                 config_yaml = f.read()
             config = yaml.load(
                 config_yaml, Loader=yaml.SafeLoader)
+
         if parsed_args.config:
+            # TODO(sridhar_ram): Only file based input supported starting
+            #       Ocata, remove all direct inputs in Pike
+            utils.deprecate_warning(what="Direct config YAML input", as_of="O",
+                                    remove_in=1)
             config = parsed_args.config
-            if isinstance(config, str):
+            if isinstance(config, str) or isinstance(config, unicode):
                 config_str = parsed_args.config.decode('unicode_escape')
                 config = yaml.load(config_str, Loader=yaml.SafeLoader)
-                utils.deprecate_warning(what='yaml as string', as_of='N',
-                                        in_favor_of='yaml as dictionary')
-
         if config:
             args['attributes']['config'] = config
         if parsed_args.vim_region_name:
@@ -152,11 +154,9 @@ class UpdateVNF(tackerV10.UpdateCommand):
             config = yaml.load(config_yaml, Loader=yaml.SafeLoader)
         if parsed_args.config:
             config = parsed_args.config
-            if isinstance(parsed_args.config, str):
+            if isinstance(config, str) or isinstance(config, unicode):
                 config_str = parsed_args.config.decode('unicode_escape')
                 config = yaml.load(config_str, Loader=yaml.SafeLoader)
-                utils.deprecate_warning(what='yaml as string', as_of='N',
-                                        in_favor_of='yaml as dictionary')
         if config:
             body[self.resource]['attributes'] = {'config': config}
         tackerV10.update_dict(parsed_args, body[self.resource], ['tenant_id'])
diff --git a/tackerclient/tacker/v1_0/vnfm/vnfd.py b/tackerclient/tacker/v1_0/vnfm/vnfd.py
index 795d2dc1..66cd7363 100644
--- a/tackerclient/tacker/v1_0/vnfm/vnfd.py
+++ b/tackerclient/tacker/v1_0/vnfm/vnfd.py
@@ -50,7 +50,7 @@ class CreateVNFD(tackerV10.CreateCommand):
     def add_known_arguments(self, parser):
         group = parser.add_mutually_exclusive_group(required=True)
         group.add_argument('--vnfd-file', help=_('Specify VNFD file'))
-        group.add_argument('--vnfd', help=_('Specify VNFD'))
+        group.add_argument('--vnfd', help=_('Specify VNFD (DEPRECATED)'))
         parser.add_argument(
             'name', metavar='NAME',
             help=_('Set a name for the VNFD'))
@@ -66,12 +66,15 @@ class CreateVNFD(tackerV10.CreateCommand):
                 vnfd = f.read()
                 vnfd = yaml.load(vnfd, Loader=yaml.SafeLoader)
         if parsed_args.vnfd:
-                vnfd = parsed_args.vnfd
-                if isinstance(vnfd, str):
-                    vnfd = yaml.load(vnfd, Loader=yaml.SafeLoader)
-                    utils.deprecate_warning(what='yaml as string',
-                                            as_of='N',
-                                            in_favor_of='yaml as dictionary')
+            # TODO(sridhar_ram): Only file based input supported starting
+            #       Ocata, remove all direct inputs in Pike
+            utils.deprecate_warning(what="Direct VNFD template input",
+                                    as_of="O",
+                                    remove_in=1)
+            vnfd = parsed_args.vnfd
+            if isinstance(vnfd, str) or isinstance(vnfd, unicode):
+                vnfd = yaml.load(vnfd, Loader=yaml.SafeLoader)
+
         if vnfd:
             body[self.resource]['attributes'] = {'vnfd': vnfd}