3232
3333from openstackclient .i18n import _
3434from openstackclient .identity import common as identity_common
35+ from openstackclient .network import common as network_common
3536
3637
3738LOG = logging .getLogger (__name__ )
@@ -234,11 +235,10 @@ def take_action(self, parsed_args):
234235 )
235236
236237
237- class AddFloatingIP (command . Command ):
238+ class AddFloatingIP (network_common . NetworkAndComputeCommand ):
238239 _description = _ ("Add floating IP address to server" )
239240
240- def get_parser (self , prog_name ):
241- parser = super (AddFloatingIP , self ).get_parser (prog_name )
241+ def update_parser_common (self , parser ):
242242 parser .add_argument (
243243 "server" ,
244244 metavar = "<server>" ,
@@ -252,19 +252,37 @@ def get_parser(self, prog_name):
252252 parser .add_argument (
253253 "--fixed-ip-address" ,
254254 metavar = "<ip-address>" ,
255- help = _ ("Fixed IP address to associate with this floating IP "
256- "address" ),
255+ help = _ (
256+ "Fixed IP address to associate with this floating IP address"
257+ ),
257258 )
258259 return parser
259260
260- def take_action (self , parsed_args ):
261+ def take_action_network (self , client , parsed_args ):
261262 compute_client = self .app .client_manager .compute
262263
264+ attrs = {}
265+ obj = client .find_ip (
266+ parsed_args .ip_address ,
267+ ignore_missing = False ,
268+ )
263269 server = utils .find_resource (
264- compute_client .servers , parsed_args .server )
270+ compute_client .servers ,
271+ parsed_args .server ,
272+ )
273+ port = list (client .ports (device_id = server .id ))[0 ]
274+ attrs ['port_id' ] = port .id
275+ if parsed_args .fixed_ip_address :
276+ attrs ['fixed_ip_address' ] = parsed_args .fixed_ip_address
277+
278+ client .update_ip (obj , ** attrs )
265279
266- server .add_floating_ip (parsed_args .ip_address ,
267- parsed_args .fixed_ip_address )
280+ def take_action_compute (self , client , parsed_args ):
281+ client .api .floating_ip_add (
282+ parsed_args .server ,
283+ parsed_args .ip_address ,
284+ fixed_address = parsed_args .fixed_ip_address ,
285+ )
268286
269287
270288class AddPort (command .Command ):
@@ -1482,11 +1500,10 @@ def take_action(self, parsed_args):
14821500 server .remove_fixed_ip (parsed_args .ip_address )
14831501
14841502
1485- class RemoveFloatingIP (command . Command ):
1503+ class RemoveFloatingIP (network_common . NetworkAndComputeCommand ):
14861504 _description = _ ("Remove floating IP address from server" )
14871505
1488- def get_parser (self , prog_name ):
1489- parser = super (RemoveFloatingIP , self ).get_parser (prog_name )
1506+ def update_parser_common (self , parser ):
14901507 parser .add_argument (
14911508 "server" ,
14921509 metavar = "<server>" ,
@@ -1501,13 +1518,21 @@ def get_parser(self, prog_name):
15011518 )
15021519 return parser
15031520
1504- def take_action (self , parsed_args ):
1505- compute_client = self .app .client_manager .compute
1521+ def take_action_network (self , client , parsed_args ):
1522+ attrs = {}
1523+ obj = client .find_ip (
1524+ parsed_args .ip_address ,
1525+ ignore_missing = False ,
1526+ )
1527+ attrs ['port_id' ] = None
15061528
1507- server = utils .find_resource (
1508- compute_client .servers , parsed_args .server )
1529+ client .update_ip (obj , ** attrs )
15091530
1510- server .remove_floating_ip (parsed_args .ip_address )
1531+ def take_action_compute (self , client , parsed_args ):
1532+ client .api .floating_ip_remove (
1533+ parsed_args .server ,
1534+ parsed_args .ip_address ,
1535+ )
15111536
15121537
15131538class RemovePort (command .Command ):
0 commit comments