ssh-key and config in NS create modal
Change-Id: Id03b474f0b07d8819c9fefa346221a6c6fc61cc8
Signed-off-by: lombardof <flombardo@cnit.it>
diff --git a/instancehandler/template/instance_list.html b/instancehandler/template/instance_list.html
index 1b0868d..54ac016 100644
--- a/instancehandler/template/instance_list.html
+++ b/instancehandler/template/instance_list.html
@@ -12,6 +12,7 @@
<link rel="stylesheet" href="/static/bower_components/codemirror/theme/neat.css">
<link rel="stylesheet" href="/static/bower_components/codemirror/addon/dialog/dialog.css">
<link rel="stylesheet" href="/static/bower_components/codemirror/addon/display/fullscreen.css">
+ <link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
{% endblock %}
{% block title_header_big %}
{{ block.super }}
@@ -36,12 +37,16 @@
<div class="box">
<div class="box-header with-border">
<h3 class="box-title">Instances</h3>
- <!--
+
<div class="box-tools">
- <a href="javascript:newVimModal()" class="btn btn-block btn-primary btn-sm"><i
- class="fa fa-plus"></i><span> New VIM</span></a>
+
+ <button type="button" class="btn btn-default" data-container="body"
+ data-toggle="tooltip" data-placement="top" title="Instantiate NS"
+ onclick="javascript:openModalCreateNS({ 'project_id':'{{project_id}}','vim_list_url': '{% url "vim:list" %}'})" disabled>
+ <i class="fa fa-paper-plane"></i> <span> New NS</span></button>
+
</div>
- -->
+
</div>
<div class="box-body">
<table id="instances_table" class="table table-bordered table-striped">
@@ -122,14 +127,15 @@
</div>
</div>
-{% include 'modal/instance_show.html' %}
-{% include 'modal/instance_new_action.html' %}
+ {% include 'modal/instance_create.html' %}
+ {% include 'modal/instance_show.html' %}
+ {% include 'modal/instance_new_action.html' %}
{% endblock %}
{% block resource_block %}
{{ block.super }}
<!-- Utility JS -->
-
+ <script src="/static/bower_components/select2/dist/js/select2.js"></script>
<script src="/static/bower_components/codemirror/lib/codemirror.js"></script>
<script src="/static/bower_components/codemirror/addon/fold/foldcode.js"></script>
<script src="/static/bower_components/codemirror/addon/fold/foldgutter.js"></script>
@@ -144,6 +150,7 @@
<script src="/static/bower_components/codemirror/addon/display/fullscreen.js"></script>
<script src="/static/bower_components/codemirror/keymap/sublime.js"></script>
<script src="/static/src/instancehandler/instance_list.js"></script>
+ <script src="/static/src/instancehandler/instance_create.js"></script>
{% endblock %}
diff --git a/instancehandler/template/modal/instance_create.html b/instancehandler/template/modal/instance_create.html
index c40ecb2..ffbce47 100644
--- a/instancehandler/template/modal/instance_create.html
+++ b/instancehandler/template/modal/instance_create.html
@@ -1,53 +1,69 @@
<div class="modal" id="modal_new_instance" xmlns="http://www.w3.org/1999/html">
- <div class="modal-dialog">
+ <div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
- <h4 class="modal-title" >New Instance</h4>
+ <h4 class="modal-title">New Instance</h4>
</div>
- <form id="formCreateNS" action='{% url "projects:instances:create" project_id=project_id%}' class="form-horizontal"
- method="post" enctype="multipart/form-data">
- {% csrf_token %}
- <div class="modal-body" id="modal_new_instance_body" >
- <div class="form-group">
- <label for="nsName" class="col-sm-3 control-label">Name</label>
+ <form id="formCreateNS" action='{% url "projects:instances:create" project_id=project_id %}'
+ class="form-horizontal"
+ method="post" enctype="multipart/form-data">
+ {% csrf_token %}
+ <div class="modal-body" id="modal_new_instance_body">
+ <div class="form-group">
+ <label for="nsName" class="col-sm-3 control-label">Name *</label>
<div class="col-sm-6">
<input class="form-control" id="nsName" name="nsName"
placeholder="Ns name" required>
</div>
- </div>
- <div class="form-group">
- <label for="nsDescription" class="col-sm-3 control-label">Description</label>
+ </div>
+ <div class="form-group">
+ <label for="nsDescription" class="col-sm-3 control-label">Description</label>
<div class="col-sm-6">
<input class="form-control" id="nsDescription" name="nsDescription"
- placeholder="Description" >
+ placeholder="Description">
</div>
- </div>
- <div class="form-group">
- <label for="nsdId" class="col-sm-3 control-label">Nsd Id</label>
+ </div>
+ <div class="form-group">
+ <label for="nsdId" class="col-sm-3 control-label">Nsd Id *</label>
<div class="col-sm-6">
<input class="form-control" id="nsdId" name="nsdId"
- placeholder="Nsd Id" >
+ placeholder="Nsd Id">
</div>
- </div>
- <div class="form-group">
- <label for="vimAccountId" class="col-sm-3 control-label">Vim Account Id</label>
+ </div>
+ <div class="form-group">
+ <label for="vimAccountId" class="col-sm-3 control-label">Vim Account Id *</label>
<div class="col-sm-6">
<select id="vimAccountId" class="js-example-basic form-control" name="vimAccountId">
</select>
</div>
+ </div>
+ <div class="form-group">
+ <label for="ssh_key" class="col-sm-3 control-label">SSH Key </label>
+ <div class="col-sm-6">
+ <textarea class="form-control" id="ssh_key" name="ssh_key"
+ placeholder="Paste your key here..." rows="4"></textarea>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="config" class="col-sm-3 control-label">Config </label>
+ <div class="col-sm-6">
+ <textarea class="form-control" id="config" name="config" placeholder="Yaml config"
+ rows="4"></textarea>
+ </div>
+ </div>
+
</div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+ <button class="btn btn-primary"
+ data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Creating..."
+ id="create_new_instance">Create
+ </button>
-
-
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
- <button class="btn btn-primary" data-loading-text="<i class='fa fa-circle-o-notch fa-spin'></i> Creating..." id="create_new_instance">Create</button>
-
- </div>
- </form>
+ </div>
+ </form>
</div>
<!-- /.modal-content -->
</div>
diff --git a/instancehandler/views.py b/instancehandler/views.py
index 0c9a8a4..86d00d5 100644
--- a/instancehandler/views.py
+++ b/instancehandler/views.py
@@ -15,9 +15,9 @@
#
from django.shortcuts import render, redirect
-from django.contrib.auth.decorators import login_required, permission_required
+from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, JsonResponse
-import json
+import yaml
import logging
from lib.osm.osmclient.client import Client
@@ -39,12 +39,29 @@
"nsDescription": request.POST.get('nsDescription', ''),
"nsdId": request.POST.get('nsdId', ''),
"vimAccountId": request.POST.get('vimAccountId', ''),
- # "ssh-authorized-key": [
- # {
- # request.POST.get('key-pair-ref', ''): request.POST.get('keyValue', '')
- # }
- # ]
}
+ if 'ssh_key' in request.POST:
+ ns_data["ssh-authorized-key"] = [request.POST.get('ssh_key')]
+
+ if 'config' in request.POST:
+ ns_config = yaml.load(request.POST.get('config'))
+ if "vim-network-name" in ns_config:
+ ns_config["vld"] = ns_config.pop("vim-network-name")
+ if "vld" in ns_config:
+ for vld in ns_config["vld"]:
+ if vld.get("vim-network-name"):
+ if isinstance(vld["vim-network-name"], dict):
+ vim_network_name_dict = {}
+ for vim_account, vim_net in vld["vim-network-name"].items():
+ vim_network_name_dict[ns_data["vimAccountId"]] = vim_net
+ vld["vim-network-name"] = vim_network_name_dict
+ ns_data["vld"] = ns_config["vld"]
+ if "vnf" in ns_config:
+ for vnf in ns_config["vnf"]:
+ if vnf.get("vim_account"):
+ vnf["vimAccountId"] = ns_data["vimAccountId"]
+
+ ns_data["vnf"] = ns_config["vnf"]
print ns_data
client = Client()
result = client.ns_create(ns_data)
@@ -53,7 +70,7 @@
@login_required
def action(request, project_id=None, instance_id=None, type=None):
- result = {}
+
client = Client()
# result = client.ns_action(instance_id, action_payload)