@@ -280,6 +280,19 @@ def _convert_address_pairs(parsed_args):
280280 return ops
281281
282282
283+ def _convert_extra_dhcp_options (parsed_args ):
284+ dhcp_options = []
285+ for opt in parsed_args .extra_dhcp_options :
286+ option = {}
287+ option ['opt_name' ] = opt ['name' ]
288+ if 'value' in opt :
289+ option ['opt_value' ] = opt ['value' ]
290+ if 'ip-version' in opt :
291+ option ['ip_version' ] = opt ['ip-version' ]
292+ dhcp_options .append (option )
293+ return dhcp_options
294+
295+
283296class CreatePort (command .ShowOne ):
284297 _description = _ ("Create a new port" )
285298
@@ -350,8 +363,18 @@ def get_parser(self, prog_name):
350363 metavar = '<name>' ,
351364 help = _ ("Name of this port" )
352365 )
353- # TODO(singhj): Add support for extended options:
354- # dhcp
366+ parser .add_argument (
367+ '--extra-dhcp-option' ,
368+ metavar = 'name=<name>[,value=<value>,ip-version={4,6}]' ,
369+ default = [],
370+ action = parseractions .MultiKeyValueCommaAction ,
371+ dest = 'extra_dhcp_options' ,
372+ required_keys = ['name' ],
373+ optional_keys = ['value' , "ip-version" ],
374+ help = _ ('Extra DHCP options to be assigned to this port: '
375+ 'name=<name>[,value=<value>,ip-version={4,6}] '
376+ '(repeat option to set multiple extra DHCP options)' ))
377+
355378 secgroups = parser .add_mutually_exclusive_group ()
356379 secgroups .add_argument (
357380 '--security-group' ,
@@ -425,6 +448,9 @@ def take_action(self, parsed_args):
425448 attrs ['allowed_address_pairs' ] = (
426449 _convert_address_pairs (parsed_args ))
427450
451+ if parsed_args .extra_dhcp_options :
452+ attrs ["extra_dhcp_opts" ] = _convert_extra_dhcp_options (parsed_args )
453+
428454 if parsed_args .qos_policy :
429455 attrs ['qos_policy_id' ] = client .find_qos_policy (
430456 parsed_args .qos_policy , ignore_missing = False ).id
0 commit comments