133
132
def __init__(self):
134
133
self.manager = manager.AuthManager()
135
self.pipe = pipelib.CloudPipe()
137
@args('--project', dest="project", metavar='<Project name>',
139
def list(self, project=None):
140
"""Print a listing of the VPN data for one or all projects."""
141
print "WARNING: This method only works with deprecated auth"
142
print "%-12s\t" % 'project',
143
print "%-20s\t" % 'ip:port',
144
print "%-20s\t" % 'private_ip',
147
projects = [self.manager.get_project(project)]
149
projects = self.manager.get_projects()
150
# NOTE(vish): This hits the database a lot. We could optimize
151
# by getting all networks in one query and all vpns
152
# in aother query, then doing lookups by project
153
for project in projects:
154
print "%-12s\t" % project.name,
155
ipport = "%s:%s" % (project.vpn_ip, project.vpn_port)
156
print "%-20s\t" % ipport,
157
ctxt = context.get_admin_context()
158
vpn = db.instance_get_project_vpn(ctxt, project.id)
162
if vpn.get('fixed_ip', None):
163
address = vpn['fixed_ip']['address']
164
if project.vpn_ip and utils.vpn_ping(project.vpn_ip,
169
print ec2utils.id_to_ec2_id(vpn['id']),
170
print vpn['vm_state'],
177
print "WARNING: This method only works with deprecated auth"
178
ctxt = context.get_admin_context()
179
for p in reversed(self.manager.get_projects()):
180
if self._vpn_for(ctxt, p.id):
181
print 'spawning %s' % p.id
182
self.pipe.launch_vpn_instance(p.id, p.project_manager_id)
185
@args('--project', dest="project_id", metavar='<Project name>',
187
@args('--user', dest="user_id", metavar='<user name>', help='User name')
188
def run(self, project_id, user_id):
189
"""Start the VPN for a given project and user."""
191
print "WARNING: This method only works with deprecated auth"
192
user_id = self.manager.get_project(project_id).project_manager_id
193
self.pipe.launch_vpn_instance(project_id, user_id)
195
135
@args('--project', dest="project_id", metavar='<Project name>',
196
136
help='Project name')
213
153
{'vpn_public_address': ip,
214
154
'vpn_public_port': int(port)})
216
def _vpn_for(self, context, project_id):
217
"""Get the VPN instance for a project ID."""
218
for instance in db.instance_get_all_by_project(context, project_id):
219
if (instance['image_id'] == str(FLAGS.vpn_image_id)
220
and not instance['vm_state'] in [vm_states.DELETED]):
224
157
class ShellCommands(object):
225
158
def bpython(self):