New Functions for Networking
Some new networking functions.
This commit is contained in:
		@@ -28,7 +28,7 @@ def index():
 | 
				
			|||||||
@requires_roles("user","admin")
 | 
					@requires_roles("user","admin")
 | 
				
			||||||
def list_images():
 | 
					def list_images():
 | 
				
			||||||
    user = User.query.get_or_404(current_user.id)
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
    provider = Provider.query.get_or_404("1")
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
    loader = loading.get_plugin_loader('password')
 | 
					    loader = loading.get_plugin_loader('password')
 | 
				
			||||||
    auth = loader.load_from_options(auth_url=provider.url,
 | 
					    auth = loader.load_from_options(auth_url=provider.url,
 | 
				
			||||||
                                    username=user.username,
 | 
					                                    username=user.username,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,19 @@ def for_resellers_only():
 | 
				
			|||||||
@requires_roles("user","reseller","admin")
 | 
					@requires_roles("user","reseller","admin")
 | 
				
			||||||
def select_provider(id):
 | 
					def select_provider(id):
 | 
				
			||||||
    provider = Provider.query.filter_by(id=id).first()
 | 
					    provider = Provider.query.filter_by(id=id).first()
 | 
				
			||||||
 | 
					    user = User.query.filter_by(id=current_user.id).first()
 | 
				
			||||||
    if provider:
 | 
					    if provider:
 | 
				
			||||||
        session['selected_provider'] = id
 | 
					        user.selected_provider_id = id
 | 
				
			||||||
 | 
					        db.session.add(user)
 | 
				
			||||||
 | 
					        flash('%s has been selected.' % provider.name)
 | 
				
			||||||
    return redirect(redirect_url())
 | 
					    return redirect(redirect_url())
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					@main.route('/all-providers')
 | 
				
			||||||
 | 
					@login_required
 | 
				
			||||||
 | 
					@requires_roles("user","reseller","admin")
 | 
				
			||||||
 | 
					def all_providers():
 | 
				
			||||||
 | 
					    providers = Provider.query.all()
 | 
				
			||||||
 | 
					    return render_template('all_providers.html',
 | 
				
			||||||
 | 
					                            title="All Providers",
 | 
				
			||||||
 | 
					                            block_description = "list of all providers",
 | 
				
			||||||
 | 
					                            providers=providers)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@ class User(UserMixin, db.Model):
 | 
				
			|||||||
    provider_password = db.Column(db.Text(255))
 | 
					    provider_password = db.Column(db.Text(255))
 | 
				
			||||||
    confirmed = db.Column(db.Boolean, default=False)
 | 
					    confirmed = db.Column(db.Boolean, default=False)
 | 
				
			||||||
    suspended = db.Column(db.Boolean, default=False)
 | 
					    suspended = db.Column(db.Boolean, default=False)
 | 
				
			||||||
    selected_provider = None
 | 
					    selected_provider_id = db.Column(db.Integer, db.ForeignKey('providers.id'))
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def password(self):
 | 
					    def password(self):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,10 @@ from ..models import User, Role, Provider
 | 
				
			|||||||
from ..email import send_email
 | 
					from ..email import send_email
 | 
				
			||||||
from ..decorators import requires_roles
 | 
					from ..decorators import requires_roles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def redirect_url():
 | 
				
			||||||
 | 
					    return request.args.get('next') or \
 | 
				
			||||||
 | 
					           request.referrer or \
 | 
				
			||||||
 | 
					           url_for('main.index')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@network.route('/', methods=['GET', 'POST'])
 | 
					@network.route('/', methods=['GET', 'POST'])
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
@@ -32,7 +36,7 @@ def index():
 | 
				
			|||||||
@requires_roles("user","admin")
 | 
					@requires_roles("user","admin")
 | 
				
			||||||
def list_ips():
 | 
					def list_ips():
 | 
				
			||||||
    user = User.query.get_or_404(current_user.id)
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
    provider = Provider.query.get_or_404("1")
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
    auth = identity.Password(auth_url=provider.url,
 | 
					    auth = identity.Password(auth_url=provider.url,
 | 
				
			||||||
                             username=user.username,
 | 
					                             username=user.username,
 | 
				
			||||||
                             password=user.provider_password,
 | 
					                             password=user.provider_password,
 | 
				
			||||||
@@ -55,12 +59,50 @@ def list_ips():
 | 
				
			|||||||
                           floatingips=floatingips, ports=ports,
 | 
					                           floatingips=floatingips, ports=ports,
 | 
				
			||||||
                           sess=sess)
 | 
					                           sess=sess)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@network.route('/get-floatingip')
 | 
				
			||||||
 | 
					@login_required
 | 
				
			||||||
 | 
					@requires_roles("user","reseller","admin")                          
 | 
				
			||||||
 | 
					def get_floatingip():
 | 
				
			||||||
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
 | 
					    auth = identity.Password(auth_url=provider.url,
 | 
				
			||||||
 | 
					                             username=user.username,
 | 
				
			||||||
 | 
					                             password=user.provider_password,
 | 
				
			||||||
 | 
					                             project_name=user.username,
 | 
				
			||||||
 | 
					                             project_domain_name='Default',
 | 
				
			||||||
 | 
					                             user_domain_name='Default')
 | 
				
			||||||
 | 
					    sess = session.Session(auth=auth)
 | 
				
			||||||
 | 
					    neutron = client.Client(session=sess)
 | 
				
			||||||
 | 
					    floating_ip = neutron.create_floatingip({'floatingip':
 | 
				
			||||||
 | 
					                                            {'floating_network_id':'a5d278cb-0157-4dbc-90be-199dc8cc95b6'}
 | 
				
			||||||
 | 
					                                            })
 | 
				
			||||||
 | 
					    flash('Floating IP has allocated.\n %s' % floating_ip['floatingip']['floating_ip_address'])
 | 
				
			||||||
 | 
					    return redirect(redirect_url())
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					@network.route('/release-floatingip/<id>')
 | 
				
			||||||
 | 
					@login_required
 | 
				
			||||||
 | 
					@requires_roles("user","reseller","admin")                          
 | 
				
			||||||
 | 
					def release_floatingip(id):
 | 
				
			||||||
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
 | 
					    auth = identity.Password(auth_url=provider.url,
 | 
				
			||||||
 | 
					                             username=user.username,
 | 
				
			||||||
 | 
					                             password=user.provider_password,
 | 
				
			||||||
 | 
					                             project_name=user.username,
 | 
				
			||||||
 | 
					                             project_domain_name='Default',
 | 
				
			||||||
 | 
					                             user_domain_name='Default')
 | 
				
			||||||
 | 
					    sess = session.Session(auth=auth)
 | 
				
			||||||
 | 
					    neutron = client.Client(session=sess)
 | 
				
			||||||
 | 
					    floating_ip = neutron.delete_floatingip(id)
 | 
				
			||||||
 | 
					    flash('Floating IP has released.')
 | 
				
			||||||
 | 
					    return redirect(redirect_url())
 | 
				
			||||||
 | 
					                           
 | 
				
			||||||
@network.route('/assign-floatingip/<id>', methods=['GET', 'POST'])
 | 
					@network.route('/assign-floatingip/<id>', methods=['GET', 'POST'])
 | 
				
			||||||
@login_required
 | 
					@login_required
 | 
				
			||||||
@requires_roles("user","admin")                          
 | 
					@requires_roles("user","admin")                          
 | 
				
			||||||
def assign_floatingip(id):
 | 
					def assign_floatingip(id):
 | 
				
			||||||
    user = User.query.get_or_404(current_user.id)
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
    provider = Provider.query.get_or_404("1")
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
    auth = identity.Password(auth_url=provider.url,
 | 
					    auth = identity.Password(auth_url=provider.url,
 | 
				
			||||||
                             username=user.username,
 | 
					                             username=user.username,
 | 
				
			||||||
                             password=user.provider_password,
 | 
					                             password=user.provider_password,
 | 
				
			||||||
@@ -99,7 +141,7 @@ def assign_floatingip(id):
 | 
				
			|||||||
@requires_roles("user","admin")                          
 | 
					@requires_roles("user","admin")                          
 | 
				
			||||||
def unassign_floatingip(id,server_id):
 | 
					def unassign_floatingip(id,server_id):
 | 
				
			||||||
    user = User.query.get_or_404(current_user.id)
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
    provider = Provider.query.get_or_404("1")
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
    auth = identity.Password(auth_url=provider.url,
 | 
					    auth = identity.Password(auth_url=provider.url,
 | 
				
			||||||
                             username=user.username,
 | 
					                             username=user.username,
 | 
				
			||||||
                             password=user.provider_password,
 | 
					                             password=user.provider_password,
 | 
				
			||||||
@@ -122,7 +164,7 @@ def unassign_floatingip(id,server_id):
 | 
				
			|||||||
@requires_roles("admin")
 | 
					@requires_roles("admin")
 | 
				
			||||||
def edit_subnet(id):
 | 
					def edit_subnet(id):
 | 
				
			||||||
    user = User.query.get_or_404(current_user.id)
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
    provider = Provider.query.get_or_404("1")
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
    auth = identity.Password(auth_url=provider.url,
 | 
					    auth = identity.Password(auth_url=provider.url,
 | 
				
			||||||
                             username=user.username,
 | 
					                             username=user.username,
 | 
				
			||||||
                             password=user.provider_password,
 | 
					                             password=user.provider_password,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ def index():
 | 
				
			|||||||
@requires_roles("user","admin")
 | 
					@requires_roles("user","admin")
 | 
				
			||||||
def list_servers():
 | 
					def list_servers():
 | 
				
			||||||
    user = User.query.get_or_404(current_user.id)
 | 
					    user = User.query.get_or_404(current_user.id)
 | 
				
			||||||
    provider = Provider.query.get_or_404(flask_session['selected_provider'])
 | 
					    provider = Provider.query.get_or_404(user.selected_provider_id)
 | 
				
			||||||
    loader = loading.get_plugin_loader('password')
 | 
					    loader = loading.get_plugin_loader('password')
 | 
				
			||||||
    auth = loader.load_from_options(auth_url=provider.url,
 | 
					    auth = loader.load_from_options(auth_url=provider.url,
 | 
				
			||||||
                                    username=user.username,
 | 
					                                    username=user.username,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										73
									
								
								dash/templates/all_providers.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								dash/templates/all_providers.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					{% extends "adminlte/base.html" %}
 | 
				
			||||||
 | 
					{% import "adminlte/layout.html" as layout with context %}
 | 
				
			||||||
 | 
					{% import "adminlte/widgets.html" as widgets with context %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block navbar %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {% include "navbar.html" %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{%- endblock navbar %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block sidebar -%}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {% include 'sidebar.html' %}
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  {% include 'sidebar_menu.html' %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{%- endblock sidebar %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content_header -%}
 | 
				
			||||||
 | 
					  {% include 'content_header.html' %}
 | 
				
			||||||
 | 
					{%- endblock content_header %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content -%}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Main content --> 
 | 
				
			||||||
 | 
					      <div class="row">
 | 
				
			||||||
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
 | 
					          <div class="box">
 | 
				
			||||||
 | 
					            <!-- /.box-header -->
 | 
				
			||||||
 | 
					            <div class="box-body">
 | 
				
			||||||
 | 
					              <table id="example2" class="table table-bordered table-hover">
 | 
				
			||||||
 | 
					                <thead>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <th>ID</th>
 | 
				
			||||||
 | 
					                  <th>Provider</th>
 | 
				
			||||||
 | 
					                  <th>Name</th>
 | 
				
			||||||
 | 
					                  <th>Action</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                </thead>
 | 
				
			||||||
 | 
					                <tbody>
 | 
				
			||||||
 | 
					                {% for provider in providers %}
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <td>{{ provider.id }}</td>
 | 
				
			||||||
 | 
					                  <td>{{ provider.provider }}</td>
 | 
				
			||||||
 | 
					                  <td>{{ provider.name }}</td>
 | 
				
			||||||
 | 
					                  <td>
 | 
				
			||||||
 | 
					                    <a href="{{ url_for('main.select_provider', id=provider.id) }}">Select</a>
 | 
				
			||||||
 | 
					                  </td>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                {% endfor %}
 | 
				
			||||||
 | 
					                </tbody>
 | 
				
			||||||
 | 
					                <tfoot>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                  <th>ID</th>
 | 
				
			||||||
 | 
					                  <th>Provider</th>
 | 
				
			||||||
 | 
					                  <th>Name</th>
 | 
				
			||||||
 | 
					                  <th>Action</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                </tfoot>
 | 
				
			||||||
 | 
					              </table>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <!-- /.box-body -->
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <!-- /.box -->
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <!-- /.col -->
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <!-- /.row -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{%- endblock content %}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
<h1>
 | 
					<h1>
 | 
				
			||||||
    Dashboard
 | 
					    {{ title }}
 | 
				
			||||||
    <small>Preview page</small>
 | 
					    <small>{{ block_description }}</small>
 | 
				
			||||||
</h1>
 | 
					</h1>
 | 
				
			||||||
<ol class="breadcrumb">
 | 
					<ol class="breadcrumb">
 | 
				
			||||||
    <li><a href="#"><i class="fa fa-dashboard"></i> Home</a></li>
 | 
					    <li><a href="{{ url_for('.index') }}"><i class="fa fa-dashboard"></i>Home</a></li>
 | 
				
			||||||
    <li>Dashboard</li>
 | 
					    <li>{{ title }}</li>
 | 
				
			||||||
</ol>
 | 
					</ol>
 | 
				
			||||||
@@ -203,19 +203,22 @@
 | 
				
			|||||||
                <span >Select Provider</span>
 | 
					                <span >Select Provider</span>
 | 
				
			||||||
              </a>
 | 
					              </a>
 | 
				
			||||||
              <ul class="dropdown-menu">
 | 
					              <ul class="dropdown-menu">
 | 
				
			||||||
                <li class="header">2 Providers </li>
 | 
					                <li class="header">Chose the provider</li>
 | 
				
			||||||
                <li>
 | 
					                <li>
 | 
				
			||||||
                  <div class="slimScrollDiv" style="position: relative; overflow: hidden; width: auto;"><ul class="menu" style="overflow: hidden; width: 100%;">
 | 
					                  <div class="slimScrollDiv" style="position: relative; overflow: hidden; width: auto;"><ul class="menu" style="overflow: hidden; width: 100%;">
 | 
				
			||||||
                    {% for provider in all_providers() %}
 | 
					                    {% for provider in all_providers() %}
 | 
				
			||||||
                    <li>
 | 
					                    <li>
 | 
				
			||||||
                      <a href="{{ url_for('main.select_provider', id=provider.id) }}">
 | 
					                      <a href="{{ url_for('main.select_provider', id=provider.id) }}">
 | 
				
			||||||
                        <i class="ion ion-ios7-people info"></i> {{  provider.name }}
 | 
					                        <i class="ion ion-ios7-people info"></i> {{  provider.name }}
 | 
				
			||||||
 | 
					                        {% if provider.id == current_user.selected_provider_id %}
 | 
				
			||||||
 | 
					                         - <i class="ion ion-checkmark-round danger"></i>
 | 
				
			||||||
 | 
					                        {% endif %}
 | 
				
			||||||
                      </a>
 | 
					                      </a>
 | 
				
			||||||
                    </li>
 | 
					                    </li>
 | 
				
			||||||
                    {% endfor %}
 | 
					                    {% endfor %}
 | 
				
			||||||
                  </ul><div class="slimScrollBar" style="width: 3px; position: absolute; top: 0px; opacity: 0.4; display: none; border-radius: 7px; z-index: 99; right: 1px; height: 195.122px; background: rgb(0, 0, 0);"></div><div class="slimScrollRail" style="width: 3px; height: 100%; position: absolute; top: 0px; display: none; border-radius: 7px; opacity: 0.2; z-index: 90; right: 1px; background: rgb(51, 51, 51);"></div></div>
 | 
					                  </ul><div class="slimScrollBar" style="width: 3px; position: absolute; top: 0px; opacity: 0.4; display: none; border-radius: 7px; z-index: 99; right: 1px; height: 195.122px; background: rgb(0, 0, 0);"></div><div class="slimScrollRail" style="width: 3px; height: 100%; position: absolute; top: 0px; display: none; border-radius: 7px; opacity: 0.2; z-index: 90; right: 1px; background: rgb(51, 51, 51);"></div></div>
 | 
				
			||||||
                </li>
 | 
					                </li>
 | 
				
			||||||
                <li class="footer"><a href="#">View all providers</a></li>
 | 
					                <li class="footer"><a href="{{ url_for('main.all_providers') }}">View all providers</a></li>
 | 
				
			||||||
              </ul>
 | 
					              </ul>
 | 
				
			||||||
            </li>
 | 
					            </li>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,12 +27,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
{% block content -%}
 | 
					{% block content -%}
 | 
				
			||||||
    <!-- Main content -->
 | 
					    <!-- Main content -->
 | 
				
			||||||
    {{ subnet }}
 | 
					 | 
				
			||||||
      <div class="row">
 | 
					      <div class="row">
 | 
				
			||||||
        <div class="col-xs-9">
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
        <div class="col-xs-3">
 | 
					 | 
				
			||||||
          <div style="margin-bottom:10px;" class="btn-group">
 | 
					          <div style="margin-bottom:10px;" class="btn-group">
 | 
				
			||||||
            <button type="button" class="btn btn-primary">Edit</button>
 | 
					            <button type="button" class="btn btn-primary">Edit</button>
 | 
				
			||||||
            <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
 | 
					            <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,17 @@
 | 
				
			|||||||
     {{ ports }}
 | 
					     {{ ports }}
 | 
				
			||||||
     -->
 | 
					     -->
 | 
				
			||||||
    <!-- Main content -->
 | 
					    <!-- Main content -->
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					      <div class="row">
 | 
				
			||||||
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
 | 
					          <div style="margin-bottom:10px;" class="btn-group">
 | 
				
			||||||
 | 
					            <a href="{{ url_for('network.get_floatingip') }}">
 | 
				
			||||||
 | 
					              <button type="button" class="btn btn-primary">Get New Floating IP</button>
 | 
				
			||||||
 | 
					            </a>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
      <div class="row">
 | 
					      <div class="row">
 | 
				
			||||||
        <div class="col-xs-12">
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
          <div class="box">
 | 
					          <div class="box">
 | 
				
			||||||
@@ -76,11 +87,13 @@
 | 
				
			|||||||
                        <span class="sr-only">Toggle Dropdown</span>
 | 
					                        <span class="sr-only">Toggle Dropdown</span>
 | 
				
			||||||
                      </button>
 | 
					                      </button>
 | 
				
			||||||
                      <ul class="dropdown-menu" role="menu">
 | 
					                      <ul class="dropdown-menu" role="menu">
 | 
				
			||||||
 | 
					                        {% if not floatingip['port_id'] %}
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                          <a href="{{ url_for('network.assign_floatingip', id=floatingip['id'] ) }}">
 | 
					                          <a href="{{ url_for('network.assign_floatingip', id=floatingip['id'] ) }}">
 | 
				
			||||||
                            Reassign
 | 
					                            Reassign
 | 
				
			||||||
                          </a>
 | 
					                          </a>
 | 
				
			||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        {% endif %}
 | 
				
			||||||
                        {% if floatingip['port_id'] %}
 | 
					                        {% if floatingip['port_id'] %}
 | 
				
			||||||
                        <li>
 | 
					                        <li>
 | 
				
			||||||
                          <a href="{{ url_for('network.unassign_floatingip', id=floatingip['id'], server_id=server_id ) }}">
 | 
					                          <a href="{{ url_for('network.unassign_floatingip', id=floatingip['id'], server_id=server_id ) }}">
 | 
				
			||||||
@@ -89,7 +102,11 @@
 | 
				
			|||||||
                        </li>
 | 
					                        </li>
 | 
				
			||||||
                        {% endif %}
 | 
					                        {% endif %}
 | 
				
			||||||
                        <li class="divider"></li>
 | 
					                        <li class="divider"></li>
 | 
				
			||||||
                        <li><a style="color:red" href="#">Release</a></li>
 | 
					                        <li>
 | 
				
			||||||
 | 
					                          <a href="{{ url_for('network.release_floatingip', id=floatingip['id'] ) }}">
 | 
				
			||||||
 | 
					                            Release
 | 
				
			||||||
 | 
					                          </a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
                      </ul>
 | 
					                      </ul>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                  </td>
 | 
					                  </td>
 | 
				
			||||||
@@ -110,6 +127,21 @@
 | 
				
			|||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <!-- /.box-body -->
 | 
					            <!-- /.box-body -->
 | 
				
			||||||
          </div>
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      <div class="row">
 | 
				
			||||||
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
 | 
					          <div style="margin-bottom:10px;" class="btn-group">
 | 
				
			||||||
 | 
					            <a href="{{ url_for('network.get_floatingip') }}">
 | 
				
			||||||
 | 
					              <button type="button" class="btn btn-primary">Create New Private Subnet</button>
 | 
				
			||||||
 | 
					            </a>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      <div class="row">
 | 
				
			||||||
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
          <div class="box">
 | 
					          <div class="box">
 | 
				
			||||||
            <div class="box-header with-border">
 | 
					            <div class="box-header with-border">
 | 
				
			||||||
              <h3 class="box-title">Private Subnets</h3>
 | 
					              <h3 class="box-title">Private Subnets</h3>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,9 +26,8 @@
 | 
				
			|||||||
{%- endblock content_header %}
 | 
					{%- endblock content_header %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block content -%}
 | 
					{% block content -%}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Main content -->
 | 
					    <!-- Main content -->
 | 
				
			||||||
    {{ servers }} <hr />
 | 
					 | 
				
			||||||
    {{ for_servers }} <hr />
 | 
					 | 
				
			||||||
      <div class="row">
 | 
					      <div class="row">
 | 
				
			||||||
        <div class="col-xs-12">
 | 
					        <div class="col-xs-12">
 | 
				
			||||||
          <div class="box">
 | 
					          <div class="box">
 | 
				
			||||||
@@ -47,7 +46,7 @@
 | 
				
			|||||||
                <tbody>
 | 
					                <tbody>
 | 
				
			||||||
                {% for server in servers %}
 | 
					                {% for server in servers %}
 | 
				
			||||||
                <tr>
 | 
					                <tr>
 | 
				
			||||||
                  <td>{{ server.name }} - {{ server.id }} </td>
 | 
					                  <td>{{ server.name }}</td>
 | 
				
			||||||
                  <td>
 | 
					                  <td>
 | 
				
			||||||
                    {% for ips in server.networks['private'] %}
 | 
					                    {% for ips in server.networks['private'] %}
 | 
				
			||||||
                      {{ ips }} |
 | 
					                      {{ ips }} |
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								migrations/versions/611ebee9c39b_.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								migrations/versions/611ebee9c39b_.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					"""empty message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Revision ID: 611ebee9c39b
 | 
				
			||||||
 | 
					Revises: 48c96b4cae0c
 | 
				
			||||||
 | 
					Create Date: 2016-10-16 14:35:50.504023
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# revision identifiers, used by Alembic.
 | 
				
			||||||
 | 
					revision = '611ebee9c39b'
 | 
				
			||||||
 | 
					down_revision = '48c96b4cae0c'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from alembic import op
 | 
				
			||||||
 | 
					import sqlalchemy as sa
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def upgrade():
 | 
				
			||||||
 | 
					    ### commands auto generated by Alembic - please adjust! ###
 | 
				
			||||||
 | 
					    op.add_column('users', sa.Column('selected_provider_id', sa.Integer(), nullable=True))
 | 
				
			||||||
 | 
					    op.create_foreign_key(None, 'users', 'providers', ['selected_provider_id'], ['id'])
 | 
				
			||||||
 | 
					    ### end Alembic commands ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def downgrade():
 | 
				
			||||||
 | 
					    ### commands auto generated by Alembic - please adjust! ###
 | 
				
			||||||
 | 
					    op.drop_constraint(None, 'users', type_='foreignkey')
 | 
				
			||||||
 | 
					    op.drop_column('users', 'selected_provider_id')
 | 
				
			||||||
 | 
					    ### end Alembic commands ###
 | 
				
			||||||
		Reference in New Issue
	
	Block a user