362
367
def add(self, project_id, user_id):
363
368
"""Adds user to project
364
369
arguments: project_id user_id"""
365
self.manager.add_to_project(user_id, project_id)
371
self.manager.add_to_project(user_id, project_id)
372
except exception.UserNotFound as ex:
367
376
def create(self, name, project_manager, description=None):
368
377
"""Creates a new project
369
378
arguments: name project_manager [description]"""
370
self.manager.create_project(name, project_manager, description)
380
self.manager.create_project(name, project_manager, description)
381
except exception.UserNotFound as ex:
372
385
def modify(self, name, project_manager, description=None):
373
386
"""Modifies a project
374
387
arguments: name project_manager [description]"""
375
self.manager.modify_project(name, project_manager, description)
389
self.manager.modify_project(name, project_manager, description)
390
except exception.UserNotFound as ex:
377
394
def delete(self, name):
378
395
"""Deletes an existing project
379
396
arguments: name"""
380
self.manager.delete_project(name)
398
self.manager.delete_project(name)
399
except exception.ProjectNotFound as ex:
382
403
def environment(self, project_id, user_id, filename='novarc'):
383
404
"""Exports environment variables to an sourcable file
384
405
arguments: project_id user_id [filename='novarc]"""
385
rc = self.manager.get_environment_rc(user_id, project_id)
407
rc = self.manager.get_environment_rc(user_id, project_id)
408
except (exception.UserNotFound, exception.ProjectNotFound) as ex:
386
411
with open(filename, 'w') as f:
397
422
arguments: project_id [key] [value]"""
398
423
ctxt = context.get_admin_context()
425
if value.lower() == 'unlimited':
401
428
db.quota_update(ctxt, project_id, key, value)
402
except exception.NotFound:
429
except exception.ProjectQuotaNotFound:
403
430
db.quota_create(ctxt, project_id, key, value)
404
project_quota = quota.get_quota(ctxt, project_id)
431
project_quota = quota.get_project_quotas(ctxt, project_id)
405
432
for key, value in project_quota.iteritems():
406
435
print '%s: %s' % (key, value)
408
437
def remove(self, project_id, user_id):
409
438
"""Removes user from project
410
439
arguments: project_id user_id"""
411
self.manager.remove_from_project(user_id, project_id)
441
self.manager.remove_from_project(user_id, project_id)
442
except (exception.UserNotFound, exception.ProjectNotFound) as ex:
413
446
def scrub(self, project_id):
414
447
"""Deletes data associated with project
514
550
class NetworkCommands(object):
515
551
"""Class for managing networks."""
517
def create(self, fixed_range=None, num_networks=None,
518
network_size=None, vlan_start=None,
519
vpn_start=None, fixed_range_v6=None, label='public'):
520
"""Creates fixed ips for host by range
521
arguments: fixed_range=FLAG, [num_networks=FLAG],
522
[network_size=FLAG], [vlan_start=FLAG],
523
[vpn_start=FLAG], [fixed_range_v6=FLAG]"""
553
def create(self, fixed_range=None, num_networks=None, network_size=None,
554
vlan_start=None, vpn_start=None, fixed_range_v6=None,
555
gateway_v6=None, label='public'):
556
"""Creates fixed ips for host by range"""
524
557
if not fixed_range:
525
raise TypeError(_('Fixed range in the form of 10.0.0.0/8 is '
526
'required to create networks.'))
558
msg = _('Fixed range in the form of 10.0.0.0/8 is '
559
'required to create networks.')
527
562
if not num_networks:
528
563
num_networks = FLAGS.num_networks
529
564
if not network_size:
534
569
vpn_start = FLAGS.vpn_start
535
570
if not fixed_range_v6:
536
571
fixed_range_v6 = FLAGS.fixed_range_v6
573
gateway_v6 = FLAGS.gateway_v6
537
574
net_manager = utils.import_object(FLAGS.network_manager)
538
net_manager.create_networks(context.get_admin_context(),
540
num_networks=int(num_networks),
541
network_size=int(network_size),
542
vlan_start=int(vlan_start),
543
vpn_start=int(vpn_start),
544
cidr_v6=fixed_range_v6,
576
net_manager.create_networks(context.get_admin_context(),
578
num_networks=int(num_networks),
579
network_size=int(network_size),
580
vlan_start=int(vlan_start),
581
vpn_start=int(vpn_start),
582
cidr_v6=fixed_range_v6,
583
gateway_v6=gateway_v6,
585
except ValueError, e:
548
590
"""List all created networks"""
1044
1076
self._convert_images(machine_images)
1079
class AgentBuildCommands(object):
1080
"""Class for managing agent builds."""
1082
def create(self, os, architecture, version, url, md5hash,
1084
"""Creates a new agent build.
1085
arguments: os architecture version url md5hash [hypervisor='xen']"""
1086
ctxt = context.get_admin_context()
1087
agent_build = db.agent_build_create(ctxt,
1088
{'hypervisor': hypervisor,
1090
'architecture': architecture,
1093
'md5hash': md5hash})
1095
def delete(self, os, architecture, hypervisor='xen'):
1096
"""Deletes an existing agent build.
1097
arguments: os architecture [hypervisor='xen']"""
1098
ctxt = context.get_admin_context()
1099
agent_build_ref = db.agent_build_get_by_triple(ctxt,
1100
hypervisor, os, architecture)
1101
db.agent_build_destroy(ctxt, agent_build_ref['id'])
1103
def list(self, hypervisor=None):
1104
"""Lists all agent builds.
1105
arguments: <none>"""
1106
fmt = "%-10s %-8s %12s %s"
1107
ctxt = context.get_admin_context()
1109
for agent_build in db.agent_build_get_all(ctxt):
1110
buildlist = by_hypervisor.get(agent_build.hypervisor)
1112
buildlist = by_hypervisor[agent_build.hypervisor] = []
1114
buildlist.append(agent_build)
1116
for key, buildlist in by_hypervisor.iteritems():
1117
if hypervisor and key != hypervisor:
1120
print "Hypervisor: %s" % key
1121
print fmt % ('-' * 10, '-' * 8, '-' * 12, '-' * 32)
1122
for agent_build in buildlist:
1123
print fmt % (agent_build.os, agent_build.architecture,
1124
agent_build.version, agent_build.md5hash)
1125
print ' %s' % agent_build.url
1129
def modify(self, os, architecture, version, url, md5hash,
1131
"""Update an existing agent build.
1132
arguments: os architecture version url md5hash [hypervisor='xen']
1134
ctxt = context.get_admin_context()
1135
agent_build_ref = db.agent_build_get_by_triple(ctxt,
1136
hypervisor, os, architecture)
1137
db.agent_build_update(ctxt, agent_build_ref['id'],
1138
{'version': version,
1140
'md5hash': md5hash})
1143
class ConfigCommands(object):
1144
"""Class for exposing the flags defined by flag_file(s)."""
1150
print FLAGS.FlagsIntoString()
1048
('user', UserCommands),
1049
1154
('account', AccountCommands),
1155
('agent', AgentBuildCommands),
1156
('config', ConfigCommands),
1158
('fixed', FixedIpCommands),
1159
('flavor', InstanceTypeCommands),
1160
('floating', FloatingIpCommands),
1161
('instance_type', InstanceTypeCommands),
1162
('image', ImageCommands),
1163
('network', NetworkCommands),
1050
1164
('project', ProjectCommands),
1051
1165
('role', RoleCommands),
1166
('service', ServiceCommands),
1052
1167
('shell', ShellCommands),
1053
('vpn', VpnCommands),
1054
('fixed', FixedIpCommands),
1055
('floating', FloatingIpCommands),
1056
('network', NetworkCommands),
1168
('user', UserCommands),
1169
('version', VersionCommands),
1057
1170
('vm', VmCommands),
1058
('service', ServiceCommands),
1060
1171
('volume', VolumeCommands),
1061
('instance_type', InstanceTypeCommands),
1062
('image', ImageCommands),
1063
('flavor', InstanceTypeCommands),
1064
('version', VersionCommands)]
1172
('vpn', VpnCommands)]
1067
1175
def lazy_match(name, key_value_tuples):