blob: 6963113d9427faa14076f45efdff39d575b4f02c [file] [log] [blame]
dwallecke62b9f02012-10-10 23:34:42 -05001# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
3# Copyright 2012 OpenStack, LLC
4# All Rights Reserved.
5#
6# Licensed under the Apache License, Version 2.0 (the "License"); you may
7# not use this file except in compliance with the License. You may obtain
8# a copy of the License at
9#
10# http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15# License for the specific language governing permissions and limitations
16# under the License.
17
sapan-konaed37d732012-01-18 22:52:12 +053018import json
Matthew Treinish26dd0fa2012-12-04 17:14:37 -050019import urllib
sapan-konaed37d732012-01-18 22:52:12 +053020
Matthew Treinisha83a16e2012-12-07 13:44:02 -050021from tempest.common.rest_client import RestClient
22from tempest import exceptions
23
sapan-konaed37d732012-01-18 22:52:12 +053024
Vincent Hou22f03c72012-08-24 17:55:13 +080025class FloatingIPsClientJSON(RestClient):
Daryl Walleck587385b2012-03-03 13:00:26 -060026 def __init__(self, config, username, password, auth_url, tenant_name=None):
Vincent Hou22f03c72012-08-24 17:55:13 +080027 super(FloatingIPsClientJSON, self).__init__(config, username, password,
Zhongyue Luo79d8d362012-09-25 13:49:27 +080028 auth_url, tenant_name)
chris fattarsi5098fa22012-04-17 13:27:00 -070029 self.service = self.config.compute.catalog_type
sapan-konaed37d732012-01-18 22:52:12 +053030
31 def list_floating_ips(self, params=None):
Sean Daguef237ccb2013-01-04 15:19:14 -050032 """Returns a list of all floating IPs filtered by any parameters."""
sapan-konaed37d732012-01-18 22:52:12 +053033 url = 'os-floating-ips'
Matthew Treinish26dd0fa2012-12-04 17:14:37 -050034 if params:
35 url += '?%s' % urllib.urlencode(params)
36
chris fattarsi5098fa22012-04-17 13:27:00 -070037 resp, body = self.get(url)
sapan-konaed37d732012-01-18 22:52:12 +053038 body = json.loads(body)
39 return resp, body['floating_ips']
40
41 def get_floating_ip_details(self, floating_ip_id):
Sean Daguef237ccb2013-01-04 15:19:14 -050042 """Get the details of a floating IP."""
sapan-konaed37d732012-01-18 22:52:12 +053043 url = "os-floating-ips/%s" % str(floating_ip_id)
chris fattarsi5098fa22012-04-17 13:27:00 -070044 resp, body = self.get(url)
sapan-konaed37d732012-01-18 22:52:12 +053045 body = json.loads(body)
46 if resp.status == 404:
47 raise exceptions.NotFound(body)
48 return resp, body['floating_ip']
49
ivan-zhu5b57daa2013-03-19 17:07:26 +080050 def create_floating_ip(self, pool_name=None):
Sean Daguef237ccb2013-01-04 15:19:14 -050051 """Allocate a floating IP to the project."""
sapan-konaed37d732012-01-18 22:52:12 +053052 url = 'os-floating-ips'
ivan-zhu5b57daa2013-03-19 17:07:26 +080053 post_body = {'pool': pool_name}
54 post_body = json.dumps(post_body)
55 resp, body = self.post(url, post_body, self.headers)
sapan-konaed37d732012-01-18 22:52:12 +053056 body = json.loads(body)
57 return resp, body['floating_ip']
58
59 def delete_floating_ip(self, floating_ip_id):
Sean Daguef237ccb2013-01-04 15:19:14 -050060 """Deletes the provided floating IP from the project."""
sapan-konaed37d732012-01-18 22:52:12 +053061 url = "os-floating-ips/%s" % str(floating_ip_id)
chris fattarsi5098fa22012-04-17 13:27:00 -070062 resp, body = self.delete(url)
sapan-konaed37d732012-01-18 22:52:12 +053063 return resp, body
64
David Kranz6e977a72012-02-13 09:34:05 -050065 def associate_floating_ip_to_server(self, floating_ip, server_id):
Sean Daguef237ccb2013-01-04 15:19:14 -050066 """Associate the provided floating IP to a specific server."""
David Kranz6e977a72012-02-13 09:34:05 -050067 url = "servers/%s/action" % str(server_id)
sapan-konaed37d732012-01-18 22:52:12 +053068 post_body = {
David Kranz6e977a72012-02-13 09:34:05 -050069 'addFloatingIp': {
70 'address': floating_ip,
sapan-konaed37d732012-01-18 22:52:12 +053071 }
72 }
73
74 post_body = json.dumps(post_body)
chris fattarsi5098fa22012-04-17 13:27:00 -070075 resp, body = self.post(url, post_body, self.headers)
sapan-konaed37d732012-01-18 22:52:12 +053076 return resp, body
77
David Kranz6e977a72012-02-13 09:34:05 -050078 def disassociate_floating_ip_from_server(self, floating_ip, server_id):
Sean Daguef237ccb2013-01-04 15:19:14 -050079 """Disassociate the provided floating IP from a specific server."""
David Kranz6e977a72012-02-13 09:34:05 -050080 url = "servers/%s/action" % str(server_id)
81 post_body = {
82 'removeFloatingIp': {
83 'address': floating_ip,
84 }
85 }
86
87 post_body = json.dumps(post_body)
chris fattarsi5098fa22012-04-17 13:27:00 -070088 resp, body = self.post(url, post_body, self.headers)
sapan-konaed37d732012-01-18 22:52:12 +053089 return resp, body
David Kranz6aceb4a2012-06-05 14:05:45 -040090
91 def is_resource_deleted(self, id):
92 try:
93 self.get_floating_ip_details(id)
94 except exceptions.NotFound:
95 return True
96 return False
Hui HX Xiangac1a55d2013-09-23 01:30:27 -070097
98 def list_floating_ip_pools(self, params=None):
99 """Returns a list of all floating IP Pools."""
100 url = 'os-floating-ip-pools'
101 if params:
102 url += '?%s' % urllib.urlencode(params)
103
104 resp, body = self.get(url)
105 body = json.loads(body)
106 return resp, body['floating_ip_pools']