Skip to content
Snippets Groups Projects
Commit 86254080 authored by root's avatar root
Browse files

Merge remote-tracking branch 'origin/v1.5_setup' into v1.5

parents 80b7117f a5c4f266
No related branches found
No related tags found
No related merge requests found
...@@ -270,3 +270,12 @@ def get_matchingprotocol_route_pks(protocolist, routes): ...@@ -270,3 +270,12 @@ def get_matchingprotocol_route_pks(protocolist, routes):
if rsp and rsp == protocols_value_list: if rsp and rsp == protocols_value_list:
route_pk_list.append(route.pk) route_pk_list.append(route.pk)
return route_pk_list return route_pk_list
class SetupForm(forms.Form):
password = forms.CharField(widget=forms.PasswordInput(), label="Password")
netconf_device = forms.CharField(label="Router host (NETCONF)")
netconf_port = forms.IntegerField(label="Router port (NETCONF)", min_value=0, max_value=65535)
netconf_user = forms.CharField(label="Router user (NETCONF)")
netconf_pass = forms.CharField(widget=forms.PasswordInput(), label="Router password (NETCONF)")
test_peer_addr = forms.CharField(label="Test peer IP subnet")
...@@ -48,6 +48,7 @@ from copy import deepcopy ...@@ -48,6 +48,7 @@ from copy import deepcopy
from django.views.decorators.cache import never_cache from django.views.decorators.cache import never_cache
from django.conf import settings from django.conf import settings
from django.template.defaultfilters import slugify from django.template.defaultfilters import slugify
from django.core.exceptions import PermissionDenied
from flowspec.helpers import send_new_mail, get_peer_techc_mails from flowspec.helpers import send_new_mail, get_peer_techc_mails
import datetime import datetime
import os import os
...@@ -919,4 +920,36 @@ def routestats(request, route_slug): ...@@ -919,4 +920,36 @@ def routestats(request, route_slug):
logger.error('routestats failed: %s' % e) logger.error('routestats failed: %s' % e)
return HttpResponse(json.dumps({"error": "No data available. %s" % e}), mimetype="application/json", status=404) return HttpResponse(json.dumps({"error": "No data available. %s" % e}), mimetype="application/json", status=404)
def setup(request):
if User.objects.count() == 0:
if request.method == "POST":
form = SetupForm(request.POST)
if form.is_valid():
u = User.objects.create_user(username="admin", email="email@example.com", password=form.cleaned_data["password"])
u.is_superuser = True
u.is_staff = True
u.save()
pr = PeerRange(network = form.cleaned_data["test_peer_addr"])
pr.save()
p = Peer(peer_name = "testpeer", peer_tag = "testpeer")
p.save()
p.networks.add(pr)
ua = UserProfile()
ua.user = u
ua.save()
ua.peers.add(p)
with open("flowspy/settings_local.py", "a") as f:
f.write("NETCONF_DEVICE = \"%s\"\n" % form.cleaned_data["netconf_device"])
f.write("NETCONF_USER = \"%s\"\n" % form.cleaned_data["netconf_port"])
f.write("NETCONF_PASS = \"%s\"\n" % form.cleaned_data["netconf_user"])
f.write("NETCONF_PORT = %s\n" % form.cleaned_data["netconf_pass"])
logger.error('TODO REMOVE: password: %s' % form.cleaned_data["password"])
return HttpResponseRedirect(reverse("welcome"))
else:
form = SetupForm()
return render(request, 'flowspy/setup.html', {'form': form})
else:
raise PermissionDenied
...@@ -62,6 +62,7 @@ urlpatterns = patterns( ...@@ -62,6 +62,7 @@ urlpatterns = patterns(
url(r'^details/(?P<route_slug>[\w\-]+)/$', 'flowspec.views.routedetails', name="route-details"), url(r'^details/(?P<route_slug>[\w\-]+)/$', 'flowspec.views.routedetails', name="route-details"),
url(r'^routestats/(?P<route_slug>[\w\-]+)/$', 'flowspec.views.routestats', name="routestats"), url(r'^routestats/(?P<route_slug>[\w\-]+)/$', 'flowspec.views.routestats', name="routestats"),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
url(r'^setup/', 'flowspec.views.setup', name='setup'),
) )
if 'graphs' in settings.INSTALLED_APPS: if 'graphs' in settings.INSTALLED_APPS:
......
...@@ -10,7 +10,6 @@ djangorestframework==2.3.14 ...@@ -10,7 +10,6 @@ djangorestframework==2.3.14
django-tinymce==2.6.0 django-tinymce==2.6.0
Django==1.4.5 Django==1.4.5
gevent==0.13.6 gevent==0.13.6
git+https://code.grnet.gr/git/nxpy
greenlet==0.3.1 greenlet==0.3.1
gunicorn==0.14.5 gunicorn==0.14.5
ipaddr==2.1.10 ipaddr==2.1.10
......
{% extends "base.html" %}
{% load i18n %}
{% block contentplaceholder %}
<div>
Set the password of admin user:
<form action="{% url setup %}" method="post">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="Set">
</form>
</div>
{% endblock %}
This diff is collapsed.
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
import nxpy as np import jncdevice as np
from ncclient import manager from ncclient import manager
from ncclient.transport.errors import AuthenticationError, SSHError from ncclient.transport.errors import AuthenticationError, SSHError
from lxml import etree as ET from lxml import etree as ET
...@@ -269,15 +269,23 @@ class Applier(object): ...@@ -269,15 +269,23 @@ class Applier(object):
return False, cause return False, cause
if edit_is_successful: if edit_is_successful:
try: try:
commit_confirmed_response = m.commit(confirmed=True, timeout=settings.COMMIT_CONFIRMED_TIMEOUT) if ":confirmed-commit" in m.server_capabilities:
commit_confirmed_is_successful, reason = is_successful(commit_confirmed_response) commit_confirmed_response = m.commit(confirmed=True, timeout=settings.COMMIT_CONFIRMED_TIMEOUT)
commit_confirmed_is_successful, reason = is_successful(commit_confirmed_response)
if not commit_confirmed_is_successful: if not commit_confirmed_is_successful:
raise Exception() raise Exception()
else:
logger.info("Successfully confirmed committed @ %s" % self.device)
if not settings.COMMIT:
return True, "Successfully confirmed committed"
else: else:
logger.info("Successfully confirmed committed @ %s" % self.device) commit_response = m.commit(confirmed=False, timeout=settings.COMMIT_CONFIRMED_TIMEOUT)
if not settings.COMMIT: if commit_response.ok:
return True, "Successfully confirmed committed" logger.info("Successfully committed @ %s" % self.device)
return True, "Successfully committed"
else:
return False, "Failed to commit changes %s" % commit_response.errors
except SoftTimeLimitExceeded: except SoftTimeLimitExceeded:
cause="Task timeout" cause="Task timeout"
logger.error(cause) logger.error(cause)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment