1717import logging
1818
1919from cliff import lister
20+ from cliff import show
2021
2122from openstackclient .common import utils
23+ from openstackclient .identity import common as identity_common
2224
2325
2426def _format_admin_state (state ):
@@ -38,6 +40,83 @@ def _format_external_gateway_info(info):
3840}
3941
4042
43+ def _get_attrs (client_manager , parsed_args ):
44+ attrs = {}
45+ if parsed_args .name is not None :
46+ attrs ['name' ] = str (parsed_args .name )
47+ if parsed_args .admin_state_up is not None :
48+ attrs ['admin_state_up' ] = parsed_args .admin_state_up
49+ if parsed_args .distributed is not None :
50+ attrs ['distributed' ] = parsed_args .distributed
51+ if 'project' in parsed_args and parsed_args .project is not None :
52+ identity_client = client_manager .identity
53+ project_id = identity_common .find_project (
54+ identity_client ,
55+ parsed_args .project ,
56+ parsed_args .project_domain ,
57+ ).id
58+ attrs ['tenant_id' ] = project_id
59+ return attrs
60+
61+
62+ class CreateRouter (show .ShowOne ):
63+ """Create a new router"""
64+
65+ log = logging .getLogger (__name__ + '.CreateRouter' )
66+
67+ def get_parser (self , prog_name ):
68+ parser = super (CreateRouter , self ).get_parser (prog_name )
69+ parser .add_argument (
70+ 'name' ,
71+ metavar = '<name>' ,
72+ help = "New router name" ,
73+ )
74+ admin_group = parser .add_mutually_exclusive_group ()
75+ admin_group .add_argument (
76+ '--enable' ,
77+ dest = 'admin_state_up' ,
78+ action = 'store_true' ,
79+ default = True ,
80+ help = "Enable router (default)" ,
81+ )
82+ admin_group .add_argument (
83+ '--disable' ,
84+ dest = 'admin_state_up' ,
85+ action = 'store_false' ,
86+ help = "Disable router" ,
87+ )
88+ parser .add_argument (
89+ '--distributed' ,
90+ dest = 'distributed' ,
91+ action = 'store_true' ,
92+ default = False ,
93+ help = "Create a distributed router" ,
94+ )
95+ parser .add_argument (
96+ '--project' ,
97+ metavar = '<poroject>' ,
98+ help = "Owner's project (name or ID)" ,
99+ )
100+ identity_common .add_project_domain_option_to_parser (parser )
101+ return parser
102+
103+ def take_action (self , parsed_args ):
104+ self .log .debug ('take_action(%s)' % parsed_args )
105+ client = self .app .client_manager .network
106+
107+ attrs = _get_attrs (self .app .client_manager , parsed_args )
108+ obj = client .create_router (** attrs )
109+
110+ columns = sorted (obj .keys ())
111+ data = utils .get_item_properties (obj , columns , formatters = _formatters )
112+
113+ if 'tenant_id' in columns :
114+ # Rename "tenant_id" to "project_id".
115+ index = columns .index ('tenant_id' )
116+ columns [index ] = 'project_id'
117+ return (tuple (columns ), data )
118+
119+
41120class ListRouter (lister .Lister ):
42121 """List routers"""
43122
0 commit comments