diff --git a/cloudcafe/compute/servers_api/client.py b/cloudcafe/compute/servers_api/client.py index 3e8455cd..d74145e2 100644 --- a/cloudcafe/compute/servers_api/client.py +++ b/cloudcafe/compute/servers_api/client.py @@ -24,6 +24,8 @@ from cloudcafe.compute.servers_api.models.servers import Server, Servers, \ ServerMins, Password from cloudcafe.compute.servers_api.models.servers import Addresses from cloudcafe.compute.servers_api.models.servers import InstanceActions +from cloudcafe.compute.servers_api.models.requests import AddFixedIP, \ + RemoveFixedIP from cloudcafe.compute.servers_api.models.requests import CreateServer, \ AddSecurityGroup from cloudcafe.compute.servers_api.models.requests import UpdateServer @@ -247,6 +249,42 @@ class ServersClient(AutoMarshallingHTTPClient): requestslib_kwargs=requestslib_kwargs) return resp + def add_fixed_ip(self, server_id, network_id, requestslib_kwargs=None): + """ + @summary: Adds a fixed IP to a server. + @param server_id: The id of an existing server. + @type server_id: String + @param network_id: A unique network id. + @type network_id: String + @return: Base Response object + @rtype: Response object + """ + request_body = AddFixedIP(network_id=network_id) + url = '{base_url}/servers/{server_id}/action'.format( + base_url=self.url, server_id=server_id) + return self.request('POST', url, + response_entity_type=None, + request_entity=request_body, + requestslib_kwargs=requestslib_kwargs) + + def remove_fixed_ip(self, server_id, address, requestslib_kwargs=None): + """ + @summary: Removes a fixed IP from a server. + @param server_id: The id of an existing server. + @type server_id: String + @param address: IP address to be removed. + @type address: String + @return: Base Response object + @rtype: Response object + """ + req_body = RemoveFixedIP(address=address) + url = '{base_url}/servers/{server_id}/action'.format( + base_url=self.url, server_id=server_id) + return self.request('POST', url, + response_entity_type=None, + request_entity=req_body, + requestslib_kwargs=requestslib_kwargs) + def list_addresses(self, server_id, requestslib_kwargs=None): """ @summary: Lists all addresses for a server. diff --git a/cloudcafe/compute/servers_api/models/requests.py b/cloudcafe/compute/servers_api/models/requests.py index 7d4e89fd..759c9b3b 100644 --- a/cloudcafe/compute/servers_api/models/requests.py +++ b/cloudcafe/compute/servers_api/models/requests.py @@ -756,12 +756,12 @@ class RemoveFixedIP(AutoMarshallingModel): Remove Fixed IP Action Request Object """ - def __init__(self, network_id): + def __init__(self, address): super(RemoveFixedIP, self).__init__() - self.network_id = network_id + self.address = address def _obj_to_json(self): - body = {'networkId': self.network_id} + body = {'address': self.address} return json.dumps({'removeFixedIp': body}) diff --git a/cloudcafe/networking/networks/common/constants.py b/cloudcafe/networking/networks/common/constants.py index 7c9dcd5c..a7a4cff1 100644 --- a/cloudcafe/networking/networks/common/constants.py +++ b/cloudcafe/networking/networks/common/constants.py @@ -69,6 +69,8 @@ class NeutronResponseCodes(object): CREATE_PORT = 201 UPDATE_PORT = 200 DELETE_PORT = 204 + ADD_FIXED_IP = 202 + REMOVE_FIXED_IP = 202 BAD_REQUEST = 400 UNAUTHORIZED = 401