Add post Plan in YAML

the API now supports Post of plan in YAML format, so this patch updates
the client post method according to the api changes.

Change-Id: I6763ff3bb82625a56c86b5f2a5c71ade4dc76594
Related-Bug: #1309493
This commit is contained in:
Pierre Padrixe
2014-06-17 12:07:51 +02:00
parent 81126cc257
commit 43ef5a0532
4 changed files with 20 additions and 18 deletions

View File

@@ -43,7 +43,6 @@ import json
import sys
import six
import yaml
from solumclient.common import cli_utils
from solumclient.openstack.common import cliutils
@@ -63,15 +62,7 @@ class AppCommands(cli_utils.CommandsBase):
with open(args.plan_file) as definition_file:
definition = definition_file.read()
# Convert yaml to json until we add yaml support in API layer.
try:
data = yaml.load(definition)
except yaml.YAMLError as exc:
print("Error in plan file: %s", str(exc))
sys.exit(1)
plan = self.client.plans.create(**data)
plan = self.client.plans.create(definition)
fields = ['uuid', 'name', 'description', 'uri']
data = dict([(f, getattr(plan, f, ''))
for f in fields])

View File

@@ -23,7 +23,6 @@ import mock
import six
from stevedore import extension
from testtools import matchers
import yaml
from solumclient.openstack.common.apiclient import auth
from solumclient.openstack.common import cliutils
@@ -188,12 +187,12 @@ class TestSolum(base.TestCase):
mock_app_create.return_value = FakeResource('foo', 'foo', 'foo', 'foo')
expected_printed_dict_args = mock_app_create.return_value._asdict()
plan_data = yaml.load(plan_file_data)
mopen = mock.mock_open(read_data=plan_file_data)
plan_data = 'version: 1\nname: ex_plan1\ndescription: dsc1.'
mopen = mock.mock_open(read_data=plan_data)
with mock.patch('%s.open' % solum.__name__, mopen, create=True):
self.make_env()
self.shell("app create /dev/null")
mock_app_create.assert_called_once_with(**plan_data)
mock_app_create.assert_called_once_with(plan_data)
mock_print_dict.assert_called_once_with(
expected_printed_dict_args,
wrap=72)

View File

@@ -157,7 +157,7 @@ class PlanManagerTest(base.TestCase):
fake_http_client = fake_client.FakeHTTPClient(fixtures=fixtures_create)
api_client = sclient.Client(fake_http_client)
mgr = plan.PlanManager(api_client)
plan_obj = mgr.create(**plan_fixture)
plan_obj = mgr.create('version: 1\nname: ex_plan1\ndescription: dsc1.')
self.assert_plan_obj(plan_obj)
def test_get(self):

View File

@@ -13,8 +13,10 @@
# under the License.
import six
import yaml
from solumclient.common import base as solum_base
from solumclient.common import exc
from solumclient.openstack.common.apiclient import base as apiclient_base
from solumclient.openstack.common import uuidutils
@@ -83,9 +85,19 @@ class PlanManager(solum_base.CrudManager, solum_base.FindMixin):
def list(self, **kwargs):
return super(PlanManager, self).list(base_url="/v1", **kwargs)
def create(self, **kwargs):
return super(PlanManager,
self).create(base_url="/v1", **kwargs)
def create(self, plan, **kwargs):
kwargs = self._filter_kwargs(kwargs)
kwargs['data'] = plan
kwargs.setdefault("headers", kwargs.get("headers", {}))
kwargs['headers']['Content-Type'] = 'x-application/yaml'
resp = self.client.post(
self.build_url(base_url="/v1", **kwargs), **kwargs)
try:
resp_plan = yaml.load(resp.content)
except yaml.YAMLError:
raise exc.BaseException(message='Could not parse response '
'from Plan API resource.')
return self.resource_class(self, resp_plan)
def get(self, **kwargs):
return super(PlanManager, self).get(base_url="/v1", **kwargs)