Add ex_create_subscription method to CloudSigma driver. Also modify subscription class so the amount attribute is an int.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/0d7b5a57 Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/0d7b5a57 Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/0d7b5a57 Branch: refs/heads/trunk Commit: 0d7b5a5787400eda65c4418fd49fc0e17e4ba244 Parents: 3f84e6b Author: Tomaz Muraus <[email protected]> Authored: Fri Jan 31 18:11:47 2014 +0100 Committer: Tomaz Muraus <[email protected]> Committed: Fri Jan 31 18:11:47 2014 +0100 ---------------------------------------------------------------------- libcloud/compute/drivers/cloudsigma.py | 36 +++++++++++++++++++- .../cloudsigma_2_0/create_subscription.json | 23 +++++++++++++ libcloud/test/compute/test_cloudsigma_v2_0.py | 16 ++++++++- 3 files changed, 73 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/libcloud/blob/0d7b5a57/libcloud/compute/drivers/cloudsigma.py ---------------------------------------------------------------------- diff --git a/libcloud/compute/drivers/cloudsigma.py b/libcloud/compute/drivers/cloudsigma.py index 266708e..5000a33 100644 --- a/libcloud/compute/drivers/cloudsigma.py +++ b/libcloud/compute/drivers/cloudsigma.py @@ -1736,6 +1736,40 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver): method='POST') return response.status == httplib.OK + def ex_create_subscription(self, amount, period, resource, + auto_renew=False): + """ + Create a new subscription. + + :param amount: Subscription amount. For example, in dssd case this + would be disk size in gigabytes. + :type amount: ``int`` + + :param period: Subscription period. For example: 30 days, 1 week, 1 + month, ... + :type period: ``str`` + + :param resource: Resource the purchase the subscription for. + :type resource: ``str`` + + :param auto_renew: True to automatically renew the subscription. + :type auto_renew: ``bool`` + """ + data = [ + { + 'amount': amount, + 'period': period, + 'auto_renew': auto_renew, + 'resource': resource + } + ] + + response = self.connection.request(action='/subscriptions/', + data=data, method='POST') + data = response.object['objects'][0] + subscription = self._to_subscription(data=data) + return subscription + # Misc extension methods def ex_list_capabilities(self): @@ -1869,7 +1903,7 @@ class CloudSigma_2_0_NodeDriver(CloudSigmaNodeDriver): subscription = CloudSigmaSubscription(id=data['id'], resource=data['resource'], - amount=data['amount'], + amount=int(data['amount']), period=data['period'], status=data['status'], price=data['price'], http://git-wip-us.apache.org/repos/asf/libcloud/blob/0d7b5a57/libcloud/test/compute/fixtures/cloudsigma_2_0/create_subscription.json ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/fixtures/cloudsigma_2_0/create_subscription.json b/libcloud/test/compute/fixtures/cloudsigma_2_0/create_subscription.json new file mode 100644 index 0000000..7699d40 --- /dev/null +++ b/libcloud/test/compute/fixtures/cloudsigma_2_0/create_subscription.json @@ -0,0 +1,23 @@ +{ + "objects": [ + { + "amount": "1", + "auto_renew": false, + "descendants": [], + "discount_amount": "0", + "discount_percent": "0", + "end_time": "2014-03-01T12:00:00+00:00", + "id": "228816", + "period": "1 month", + "price": "10.26666666666666666666666667", + "remaining": "1", + "resource": "vlan", + "resource_uri": "/api/2.0/subscriptions/228816/", + "start_time": "2014-01-31T17:06:19.388295+00:00", + "status": "active", + "subscribed_object": "2494079f-8376-40bf-9b37-34d633b8a7b7", + "uuid": "0dd25c5c-6c01-498f-b009-e07d76552a1a" + } + ], + "price": "10.26666666666666666666666667" +} http://git-wip-us.apache.org/repos/asf/libcloud/blob/0d7b5a57/libcloud/test/compute/test_cloudsigma_v2_0.py ---------------------------------------------------------------------- diff --git a/libcloud/test/compute/test_cloudsigma_v2_0.py b/libcloud/test/compute/test_cloudsigma_v2_0.py index 966a072..7d04682 100644 --- a/libcloud/test/compute/test_cloudsigma_v2_0.py +++ b/libcloud/test/compute/test_cloudsigma_v2_0.py @@ -332,11 +332,21 @@ class CloudSigmaAPI20BaseTestCase(object): self.assertEqual(len(subscriptions), 5) self.assertEqual(subscription.id, '7272') self.assertEqual(subscription.resource, 'vlan') - self.assertEqual(subscription.amount, '1') + self.assertEqual(subscription.amount, 1) self.assertEqual(subscription.period, '345 days, 0:00:00') self.assertEqual(subscription.status, 'active') self.assertEqual(subscription.price, '0E-20') + def test_ex_create_subscription(self): + CloudSigmaMockHttp.type = 'CREATE_SUBSCRIPTION' + subscription = self.driver.ex_create_subscription(amount=1, + period='1 month', + resource='vlan') + self.assertEqual(subscription.amount, 1) + self.assertEqual(subscription.period, '1 month') + self.assertEqual(subscription.resource, 'vlan') + self.assertEqual(subscription.price, '10.26666666666666666666666667') + def test_ex_list_subscriptions_status_filterting(self): CloudSigmaMockHttp.type = 'STATUS_FILTER' self.driver.ex_list_subscriptions(status='active') @@ -577,6 +587,10 @@ class CloudSigmaMockHttp(MockHttpTestCase): body = '' return (httplib.OK, body, {}, httplib.responses[httplib.OK]) + def _api_2_0_subscriptions_CREATE_SUBSCRIPTION(self, method, url, body, headers): + body = self.fixtures.load('create_subscription.json') + return (httplib.OK, body, {}, httplib.responses[httplib.OK]) + def _api_2_0_capabilities(self, method, url, body, headers): body = self.fixtures.load('capabilities.json') return (httplib.OK, body, {}, httplib.responses[httplib.OK])
