init
Some checks failed
Build And Test / build-and-push (push) Failing after 53s

This commit is contained in:
2024-12-13 17:12:03 +09:00
parent a27be94b19
commit ea11832a53
695 changed files with 71766 additions and 1 deletions

View File

@ -0,0 +1,111 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section class="pt-3">
<h3>nginx ingress만 생성가능</h3>
<div class="row">
<div class="mt-5 col-12 text-center">Create LoadBalancer for ingress
<br>
<samp>충돌 여부 확인 후 문제 없을시 기본값 사용 가능.</samp>
</div>
</div>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:kubectlApplyLB' %}">{% csrf_token %}
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4">
<label for="clusterName">Cluster Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="clusterName" id="clusterName"
value="demo-cluster">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="loadBancerName">LoadBalancer Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="loadBancerName" id="loadBancerName"
value="demo-lb-ingress">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="floatingIP">Floating IP</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="floatingIP" id="floatingIP">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail"
value="{{ user.nhnc_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-info float-right">Request</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<script>
function selectRegion() {
let selectRegionValue = document.getElementById('region').value;
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhnc_api_tenant_id }}";
}
</script>
<script>
function createClickMsg() {
alert('Cluster 상태가 조회됩니다.');
}
</script>
{% endblock %}

View File

@ -0,0 +1,262 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="mt-3 row">
<div class="mt-5 col-12 text-center">Create NKS Public-Subnet
<br>
<samp>충돌 여부 확인 후 문제 없을시 기본값 사용 가능.</samp>
</div>
</div>
<div class="row">
<div class="col-lg-4">
</div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:createOnlyCluster' %}">{% csrf_token %}
<!-- vpc -->
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4 form-group">
<label for="vpc">VPC</label>
</div>
<div class="col-md-7">
<select class="form-control" name="vpc" id="vpc" onchange="vpcToSubnetList();">
<option value="select...">select...</option>
{% for var in vpcList %}
{% for key, value in var.items %}
<option value="{{ value }}">{{ key }}</option>
<!-- <option value="{{ value }}">{{ key }}</option> -->
{% endfor %}
{% endfor %}
</select>
</div>
<div class="col-md-1">
<a class="btn btn-primary float-right" href="#" data-bs-toggle="modal" data-bs-target="#getVpcListeModal"><i class="fa-solid fa-magnifying-glass"></i></a>
</div>
</div>
</div>
<!-- subnet -->
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="publicSubnet">Subnet</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="publicSubnet" id="publicSubnet" readonly>
</div>
</div>
</div>
<!-- region -->
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegionPost(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<hr>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="clusterName">Cluster Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="clusterName" id="clusterName" value="demo-cluster">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="keyPair">KeyPair Name</label>
</div>
<div class="col-md-8">
<select class="form-control" name="KeyPair" id="KeyPair" value="selectKeyPair">
<option value="select...">select...</option>
<option value="keyPair-kr1">keyPair-kr1</option>
<option value="keyPair-kr2">keyPair-kr2</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId" value="{{ user.nhnc_api_tenant_id }}" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary float-right" onclick="createClickMsg();">Create</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
<!-- modal -->
<form method="post" action=".">{% csrf_token %}
<div class="modal fade" id="getVpcListeModal" tabindex="-1" aria-labelledby="getVpcListeModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="getVpcListeModalTitle">API 비밀번호를 입력해주세요.</h5>
<!-- <button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button> -->
</div>
<div class="modal-body">
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Subnet Type</label>
</div>
<div class="col-md-8">
<div class="form-check">
<input class="form-check-input" type="radio" name="subnetRadio" id="publicSubnetId" value="option1" checked>
<label class="form-check-label" for="subnetRadio1">
Public subnet
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="subnetRadio" id="privateSubnetId" value="option2">
<label class="form-check-label" for="subnetRadio2">
Private subnet
</label>
</div>
</div>
</div>
</div>
<!-- region -->
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region-pre">Region</label>
</div>
<div class="col-md-7">
<select class="form-control" name="region-pre" id="region-pre">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
<div class="col-md-1">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-7">
<input type="password" class="form-control" name="apiPw" id="apiPw">
<input type="hidden" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}">
<input type="hidden" name="tenantId-pre" id="tenantId-pre" value="{{ user.nhnc_api_tenant_id }}">
<input type="hidden" name="searchVpcList" id="searchVpcList" value="yes">
</div>
<div class="col-md-1">
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-info float-right" onclick="alert('VPC리스트가 조회됩니다...')">Request</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</form>
</section>
<script>
function selectRegion(){
var selectRegionValue;
var regionPreValue;
regionPreValue = document.getElementById('region-pre').value;
console.log(selectRegionValue);
if (regionPreValue == "kr1") {
document.getElementById('vpc').value = "kr1";
}
else if (regionPreValue == "kr2") {
document.getElementById('vpc').value = "kr2";
}
else {
console.log('pass');
}
vpcToSubnetList();
}
function vpcToSubnetList(){
let selectRegionValue = document.getElementById('vpc').value;
console.log(selectRegionValue);
var dict = {};
var subDict = {};
{% for x, y in subnetList.items %}
{% for a, b in y.items %}
subDict["{{ a }}"] = "{{ b | safe}}";
{% endfor %}
dict["{{ x }}"] = subDict;
subDict = {};
{% endfor %}
document.getElementById('publicSubnet').value = dict[selectRegionValue]["id"];
}
function selectRegionPost(){
var regionValue;
regionValue = document.getElementById('region').value;
if (regionValue == "kr1") {
document.getElementById('KeyPair').value = "keyPair-kr1";
}
else if (regionValue == "kr2") {
document.getElementById('KeyPair').value = "keyPair-kr2";
}
else {
document.getElementById('KeyPair').value = "none";
}
}
function createClickMsg(){
alert('약 15분 이내로 Cluster가 생성됩니다.\n페이지 새로고침을 하지 말아주세요.\n생성이 완료되면 페이지가 변경됩니다.');
}
</script>
{% endblock %}

View File

@ -0,0 +1,82 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="row">
<div class="mt-5 col-12 text-center">Network Information</div>
</div>
<br>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:infoVpcList' %}">{% csrf_token %}
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-info float-right">Request</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<script>
function selectRegion() {
let selectRegionValue = document
.getElementById('region')
.value;
console.log(selectRegionValue);
document
.getElementById('tenantId')
.value = "{{ user.nhnc_api_tenant_id }}";
}
</script>
<script>
function createClickMsg() {
alert('vpc 리스트가 조회됩니다.');
}
</script>
{% endblock %}

View File

@ -0,0 +1,16 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="row">
<div class="col-lg-8">
<h3>{{ resultMsg }}</h3>
</div>
</div>
</section>
{% endblock %}

View File

@ -0,0 +1,16 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="row">
<div class="col-lg-8">
<h3>{{ resultMsg }}</h3>
</div>
</div>
</section>
{% endblock %}

View File

@ -0,0 +1,170 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section class="pt-3">
{% if clusters %}
<div class="col-lg-12">
<h1>Result Message</h1>
<h6>Cluster를 삭제 전 Cluster에서사용 중인 리소스를 먼저 제거해야 합니다.</h6>
<hr>
</div>
{% for var in clusters %}
<div class="col-lg-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">No</th>
<th scope="col">Region</th>
{% for key in var.keys %}
<th scope="col">{{ key }}</th>
{% endfor %}
<th scope="col">
delete
</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ forloop.counter }}</td>
<td id="region-{{ forloop.counter }}">{{ region }}</td>
{% for key, value in var.items %}
{% if key == "kubeconfig" and value != "" %}
<td id="{{ key }}-{{ forloop.parentloop.counter }}">
<!-- 링크에 고유 ID를 부여하여 중복 방지 -->
<a id="download-link-{{ forloop.parentloop.counter }}" href="#" type="button" class="btn btn-primary justify-content-end" role="button" download="kubeconfig-{{ forloop.parentloop.counter }}.yaml">config</a>
<script>
(function (id, textContent) {
if (textContent && textContent.trim() !== "") {
var blob = new Blob([textContent], {type: 'text/plain'});
var url = URL.createObjectURL(blob);
document
.getElementById('download-link-' + id)
.href = url;
}
})('{{ forloop.parentloop.counter }}', `{{ value|escapejs }}`);
</script>
</td>
{% else %}
<td id="{{ key }}-{{ forloop.parentloop.counter }}">{{ value }}</td>
{% endif %}
{% endfor %}
<td>
<a type="submit" id="delete-{{ forloop.counter }}" class="btn btn-info justify-content-end" href="#" data-bs-toggle="modal" data-bs-target="#deleteModal" onclick="tenantIdToModal();">Delete</a>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
{% else %}
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="row">
<div class="col-lg-6">
<h3>리전에 생성된 Cluster가 없습니다...</h3>
</div>
</div>
{% endif %}
<!-- End Cluster All list -->
<div class="col-lg-12 d-flex justify-content-end">
<a class="btn btn-primary" href="/nhncloud/createClusterOnlyRequest">create nks</a>
</div>
</section>
<!-- Delete kubernetes Cluster -->
<form method="post" action="{% url 'nhncloud:removeCluster' %}">{% csrf_token %}
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalTitle">API 비밀번호를 입력해주세요.</h5>
</div>
<div class="modal-body">
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" readonly="readonly">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="clusterName">Cluster Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="clusterName" id="clusterName" readonly="readonly">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId" readonly="readonly">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-info justify-content-end" onclick="alert('삭제 명령 전송 후 Cluster 리스트가 조회됩니다...')">Request</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
function tenantIdToModal() {
id = event.srcElement.id
var idx = id.indexOf('-') + 1
tenantId = "tenant_id-" + id.substring(idx)
clusterNameId = "name-" + id.substring(idx)
regionId = "region-" + id.substring(idx)
document
.getElementById('region')
.value = document
.getElementById(regionId)
.innerText
document
.getElementById('clusterName')
.value = document
.getElementById(clusterNameId)
.innerText
document
.getElementById('tenantId')
.value = "{{ user.nhnc_api_tenant_id }}";
}
</script>
{% endblock %}

View File

@ -0,0 +1,165 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<!-- start vpclist -->
{% if vpcs %}
<div class="col-lg-12">
<h1>Result Message</h1>
<h6 class="text-danger">Network를 삭제려면 Network에 속한 사용 중인 리소스를 먼저 제거해야 합니다.</h6>
<hr>
</div>
{% for var in vpcs %}
<div class="col-lg-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">No</th>
<th scope="col">Region</th>
{% for key in var.keys %}
<th scope="col">{{ key }}</th>
{% endfor %}
<th scope="col">
delete
</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ forloop.counter }}</td>
<!-- <td id="region-{{ forloop.counter }}">{{ region }}</td> -->
<td id="region-{{ forloop.counter }}">{{ region }}</td>
{% for key, value in var.items %}
<td id="{{ key }}-{{ forloop.parentloop.counter }}">{{ value }}</td>
{% endfor %}
<td>
<a type="submit" id="delete-{{ forloop.counter }}" class="btn btn-info float-right" href="#"
data-bs-toggle="modal" data-bs-target="#deleteModal" onclick="vpcRemoveModal();">Delete</a>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
{% else %}
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="row">
<div class="col-lg-8">
<h3>리전에 생성된 VPC가 없습니다...</h3>
</div>
<div class="col-lg-2">
<a class="btn btn-primary float-left" href="/nhncloud/createVpcRequest/">CreateNetwork</a>
</div>
</div>
{% endif %}
</section>
<!-- Modal -->
<form method="post" action="{% url 'nhncloud:removeVpc' %}">{% csrf_token %}
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalTitle">삭제를 위하여 계정 및 api 비밀번호를 입력해주세요.</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">InterNetGateway</label>
</div>
<div class="col-md-8">
<div class="form-check">
<input class="form-check-input" type="radio" name="igwRadios" id="igwInclude" value="option1" checked>
<label class="form-check-label" for="igwRadios1">
Include
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="igwRadios" id="igwDetach" value="option2">
<label class="form-check-label" for="igwRadios2">
Detach
</label>
</div>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="region" id="region" value="{{ region }}" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="vpcName">Vpc Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="vpcName" id="vpcName" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId" value="{{ user.nhnc_api_tenant_id }}" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-info float-right"
onclick="alert('삭제 완료 후 VPC리스트가 조회됩니다...')">Request</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
function vpcRemoveModal() {
id = event.srcElement.id
console.log(id);
var idx = id.indexOf('-') + 1
tenantId = "tenant_id-" + id.substring(idx)
vpcNameId = "name-" + id.substring(idx)
regionId = "region-" + id.substring(idx)
document.getElementById('vpcName').value = document.getElementById(vpcNameId).innerText
document.getElementById('region').value = document.getElementById(regionId).innerText
document.getElementById('tenantId').value = "{{ user.nhnc_api_tenant_id }}";
}
</script>
{% endblock %}

View File

@ -0,0 +1,182 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="container">
<div class="row justify-content-between">
<div class="col-lg-4 text-warning">
<h2 class="text-dark mt-5">NHN Cloud</h2>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">사용전 주의 사항</h6>
<a class="btn btn-warning float-left text-white" href="/nhncloud/preparations" target="_blank">Preparations</a>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">VPC 조회 및 삭제</h6>
<a class="btn btn-primary float-left" href="/nhncloud/infoVpcListRequest">Network Info</a>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">VPC 및 Public Subnet 구성</h6>
<a class="btn btn-primary float-left" href="/nhncloud/createVpcRequest">CreateNetwork</a>
</div>
</div>
</div>
<div class="col-lg-4 text-warning">
<h2 class="text-dark mt-5">NKS Cluster</h2>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">NHN Cloud Kubernetes Cluster 생성</h6>
<div class="row">
<div class="col-lg-6">
<a class="btn btn-primary float-left" href="/nhncloud/createClusterOnlyRequest">Cluster Only</a>
</div>
<div class="col-lg-6">
<a class="btn btn-danger text-white float-left" href="/nhncloud/createClusterRequest">Cluster + VPC</a>
</div>
</div>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">Kubernetes Cluster Info</h6>
<a class="btn btn-primary float-left" href="/nhncloud/infoClusterListRequest">Cluster List Info</a>
</div>
</div>
</div>
<div class="col-lg-4 text-warning">
<h2 class="text-dark mt-5">NKS Components</h2>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">Ingress LoadBalancer Deploy</h6>
<div class="row">
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">View</a>
</div>
<div class="col-lg-4">
<a class="btn btn-info float-left" href="/nhncloud/applyClusterLbRequest">Deploy</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">Delete</a>
</div>
</div>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">Sample Pod Deploy</h6>
<div class="row">
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">View</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">Deploy</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">Delete</a>
</div>
</div>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
</div>
</div>
<div class="row justify-content-between">
<div class="col-lg-4 text-warning">
<h2 class="text-dark mt-5">Storage</h2>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">Object Storage</h6>
<div class="row">
<div class="col-lg-4">
<a class="btn btn-primary float-left" href="/nhncloud/infoObjectStorageRequest">View</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">Create</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">empty</a>
</div>
</div>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">Block Storage</h6>
<div class="row">
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">View</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">Deploy</a>
</div>
<div class="col-lg-4">
<a class="btn btn-dark float-left" href="#">Delete</a>
</div>
</div>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">NFS</h6>
<a class="btn btn-dark text-whitefloat-left" href="#">API 기능 없음</a>
</div>
</div>
</div>
<div class="col-lg-4 text-warning">
<h2 class="text-dark mt-5">...</h2>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
</div>
<div class="col-lg-4 text-warning">
<h2 class="text-dark mt-5">...</h2>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
<div class="card mt-1">
<div class="card-body">
<h6 class="text-dark">개발 예정</h6>
<a class="btn btn-dark float-left" href="#">개발 예정</a>
</div>
</div>
</div>
</div>
</div>
</section>
{% endblock %}

View File

@ -0,0 +1,312 @@
<!DOCTYPE html>
{% load static %}
<html lang="ko">
<head>
<title>Create Cluster | sdjo web site</title>
<link rel="stylesheet" href="{% static 'blog/bootstrap/bootstrap.min.css' %}" type="text/css">
<script src="https://kit.fontawesome.com/77d81e5d17.js" crossorigin="anonymous"></script>
</head>
<body class="pb-5">
{% include 'common/navbar.html' %}
<section>
<div class="mt-3 row">
<div class="mt-5 col-12 text-center">Create NKS Public-Subnet
<br>
<samp>충돌 여부 확인 후 문제 없을시 기본값 사용 가능.</samp>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<!-- region -->
<form name="formRegion" action="." method="post">{% csrf_token %}
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4 form-group">
<label for="region-pre">Region</label>
</div>
<div class="col-md-7">
<select class="form-control" name="region-pre" id="region-pre">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
<div class="col-md-1">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-7">
<input type="password" class="form-control" name="apiPw" id="apiPw">
<input type="hidden" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhn_id }}">
<input type="hidden" name="tenantId-pre" id="tenantId-pre" value="{{ user.nhn_cpt_tntid }}">
<input type="hidden" name="searchVpcList" id="searchVpcList" value="yes">
</div>
<div class="col-md-1">
<button type="submit" class="btn btn-primary float-right"><i class="fa-solid fa-magnifying-glass"></i></button>
</div>
</div>
</div>
</form>
</div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:createOnlyCluster' %}">{% csrf_token %}
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4 form-group">
<label for="region-pre">Region</label>
</div>
<div class="col-md-7">
<select class="form-control" name="region-pre" id="region-pre">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
<div class="col-md-1">
</div>
</div>
</div>
<!-- vpc -->
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="vpc">VPC</label>
</div>
<div class="col-md-8">
<select class="form-control" name="vpc" id="vpc" onchange="vpcToSubnetList();">
<option value="select...">select...</option>
{% for var in vpcList %}
{% for key, value in var.items %}
<option value="{{ key }}">{{ key }}</option>
<!-- <option value="{{ value }}">{{ key }}</option> -->
{% endfor %}
{% endfor %}
</select>
</div>
</div>
</div>
<!-- subnet -->
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="publicSubnet">Public subnet</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="publicSubnet" id="publicSubnet" readonly>
</div>
</div>
</div>
<hr>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="clusterName">Cluster Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="clusterName" id="clusterName" value="demo-cluster">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="keyPair">KeyPair Name</label>
</div>
<div class="col-md-8">
<select class="form-control" name="KeyPair" id="KeyPair" value="selectKeyPair">
<option value="select...">select...</option>
<option value="keyPair-kr1">keyPair-kr1</option>
<option value="keyPair-kr2">keyPair-kr2</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="igwId">InternetGateway ID</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="igwId" id="igwId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhn_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary float-right" onclick="createClickMsg();">Create</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
<!-- modal -->
<form method="post" action="{% url 'nhncloud:removeCluster' %}">{% csrf_token %}
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalTitle">API 비밀번호를 입력해주세요.</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" readonly>
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="clusterName">Cluster Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="clusterName" id="clusterName" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhn_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-info float-right" onclick="alert('삭제 명령 전송 후 Cluster 리스트가 조회됩니다...')">Request</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
crossorigin="anonymous"></script>
<script>
function selectRegion(){
var selectRegionValue;
if(document.getElementById('region-pre').value == ""){
selectRegionValue = document.getElementById('region').value;
}else{
selectRegionValue = document.getElementById('region-pre').value;
}
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhn_cpt_tntid }}";
if (selectRegionValue == "kr1") {
document.getElementById('vpc').value = "kr1";
}
else if (selectRegionValue == "kr2") {
document.getElementById('vpc').value = "kr2";
}
else {
document.getElementById('KeyPair').value = "none";
}
console.log("다른 함수 호출");
vpcToSubnetList();
}
function vpcToSubnetList(){
let selectRegionValue = document.getElementById('vpc').value;
var dict = {};
var subDict = {};
{% for x, y in subnetList.items %}
{% for a, b in y.items %}
subDict["{{ a }}"] = "{{ b | safe}}";
{% endfor %}
dict["{{ x }}"] = subDict;
subDict = {};
{% endfor %}
console.log("dict출력 : ");
console.log(dict);
// console.log(dict["demo2-vpc"]["name"]);
// console.log(dict["demo2-vpc"]["id"]);
// console.log(selectRegionValue);
console.log(dict[selectRegionValue]["name"]);
console.log(dict[selectRegionValue]["id"]);
document.getElementById('publicSubnet').value = dict[selectRegionValue]["id"];
}
function createClickMsg(){
alert('약 15분 이내로 Cluster가 생성됩니다.\n페이지 새로고침을 하지 말아주세요.\n생성이 완료되면 페이지가 변경됩니다.');
}
</script>
</body>
{% include 'blog/footer.html' %}
</html>

View File

@ -0,0 +1,157 @@
<!DOCTYPE html>
{% load static %}
<html lang="ko">
<head>
<title>Create Cluster | sdjo web site</title>
<link rel="stylesheet" href="{% static 'blog/bootstrap/bootstrap.min.css' %}" type="text/css">
<script src="https://kit.fontawesome.com/77d81e5d17.js" crossorigin="anonymous"></script>
</head>
<body class="pb-5">
{% include 'common/navbar.html' %}
<section>
<div class="mt-3 row">
<div class="mt-5 col-12 text-center">Create NKS Public-Subnet
<br>
<samp>충돌 여부 확인 후 문제 없을시 기본값 사용 가능.</samp>
</div>
</div>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:createCluster' %}">{% csrf_token %}
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4">
<label for="taskName">Task Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="taskName" id="taskName" value="demo">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="keyPair">KeyPair Name</label>
</div>
<div class="col-md-8">
<select class="form-control" name="KeyPair" id="KeyPair" value="selectKeyPair">
<option value="select...">select...</option>
<option value="keyPair-kr1">keyPair-kr1</option>
<option value="keyPair-kr2">keyPair-kr2</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhn_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="vpcCidr">Vpc cidr</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="vpcCidr" id="vpcCidr" value="10.5.0.0/16">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="subnetCidr">Subnet cidr</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="subnetCidr" id="subnetCidr" value="10.5.2.0/24">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="igwId">InternetGateway ID</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="igwId" id="igwId">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary float-right" onclick="createClickMsg();">Create</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
crossorigin="anonymous"></script>
<script>
function selectRegion(){
let selectRegionValue = document.getElementById('region').value;
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhn_cpt_tntid }}";
if (selectRegionValue == "kr1") {
document.getElementById('KeyPair').value = "keyPair-kr1";
}
else if (selectRegionValue == "kr2") {
document.getElementById('KeyPair').value = "keyPair-kr2";
}
else {
document.getElementById('KeyPair').value = "none";
}
}
</script>
<script>
function createClickMsg(){
alert('약 15분 이내로 Cluster가 생성됩니다.\n페이지 새로고침을 하지 말아주세요.\n생성이 완료되면 페이지가 변경됩니다.');
}
</script>
</body>
</html>

View File

@ -0,0 +1,133 @@
{% extends 'components/base_nhncloud.html' %}
{% block main_area %}
<section>
<div class="mt-3 row">
<div class="mt-5 col-12 text-center">Create VPC & Public-Subnet
<br>
<samp>충돌 여부 확인 후 문제 없을시 기본값 사용 가능.</samp>
</div>
</div>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:createVpc' %}">{% csrf_token %}
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4">
<label for="taskName">VPC Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="taskName" id="taskName" value="demo-vpc">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail"
value="{{ user.nhnc_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="vpcCidr">Vpc cidr</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="vpcCidr" id="vpcCidr" value="10.5.0.0/16">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="subnetCidr">Subnet cidr</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="subnetCidr" id="subnetCidr"
value="10.5.2.0/24">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="igwId">InternetGateway ID</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control bg-light" name="igwId" id="igwId"
placeholder="값을 넣지 않으면 Private Subnet으로 생성됩니다.">
</div>
</div>
</div>
<button type="submit" class="btn btn-primary float-right" onclick="createClickMsg();">Create</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<script>
function selectRegion() {
let selectRegionValue = document.getElementById('region').value;
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhnc_api_tenant_id }}";
if (selectRegionValue == "kr1") {
document.getElementById('KeyPair').value = "keyPair-kr1";
}
else if (selectRegionValue == "kr2") {
document.getElementById('KeyPair').value = "keyPair-kr2";
}
else {
document.getElementById('KeyPair').value = "none";
}
}
</script>
<script>
function createClickMsg() {
alert('약 5분 이내로 Vpc가 생성됩니다.\n페이지 새로고침을 하지 말아주세요.\n생성이 완료되면 페이지가 변경됩니다.');
}
</script>
{% endblock %}

View File

@ -0,0 +1,109 @@
<!DOCTYPE html>
{% load static %}
<html lang="ko">
<head>
<title>Info Request | sdjo web site</title>
<link rel="stylesheet" href="{% static 'blog/bootstrap/bootstrap.min.css' %}" type="text/css">
<script src="https://kit.fontawesome.com/77d81e5d17.js" crossorigin="anonymous"></script>
</head>
<body class="pt-5">
{% include 'common/navbar.html' %}
<section>
<div class="row">
<div class="mt-5 col-12 text-center">Create NKS Public-Subnet
<br>
<samp>충돌 여부 확인 후 문제 없을시 기본값 사용 가능.</samp>
</div>
</div>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:infoClusterDetail' %}">{% csrf_token %}
<div class="mb-3 mt-5">
<div class="row">
<div class="col-md-4">
<label for="clusterName">Cluster Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="clusterName" id="clusterName" value="demo-cluster">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhn_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-info float-right">Request</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<div class="fixed-bottom">
{% include 'blog/footer.html' %}
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
crossorigin="anonymous"></script>
<script>
function selectRegion(){
let selectRegionValue = document.getElementById('region').value;
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhn_cpt_tntid }}";
}
</script>
<script>
function createClickMsg(){
alert('Cluster 상태가 조회됩니다.');
}
</script>
</body>
</html>

View File

@ -0,0 +1,76 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="row">
<div class="mt-5 col-12 text-center">NKS Cluster Information</div>
</div>
<br>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:infoClusterList' %}">{% csrf_token %}
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-info float-right">Request</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<script>
function selectRegion(){
let selectRegionValue = document.getElementById('region').value;
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhnc_api_tenant_id }}";
}
</script>
<script>
function createClickMsg(){
alert('Cluster 상태가 조회됩니다.');
}
</script>
{% endblock %}

View File

@ -0,0 +1,97 @@
<!DOCTYPE html>
{% load static %}
<html lang="ko">
<head>
<title>Info Request | sdjo web site</title>
<link rel="stylesheet" href="{% static 'blog/bootstrap/bootstrap.min.css' %}" type="text/css">
<script src="https://kit.fontawesome.com/77d81e5d17.js" crossorigin="anonymous"></script>
</head>
<body class="pt-5">
{% include 'common/navbar.html' %}
<section>
<div class="row">
<div class="mt-5 col-12 text-center">NKS ObjectStorage Information</div>
</div>
<br>
<div class="row">
<div class="col-lg-4"></div>
<div class="col-lg-4">
<form method="post" action="{% url 'nhncloud:infoObjectStorageList' %}">{% csrf_token %}
<input type="hidden" class="form-control" name="objStrgAccount" id="objStrgAccount" value="{{ user.nhn_obstg_sc }}">
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" onchange="selectRegion(this.value);">
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="tenantId">Tenant ID</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="tenantId" id="tenantId">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="usrEmail">User Email</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhn_id }}">
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
<button type="submit" class="btn btn-info float-right">Request</button>
</form>
</div>
<div class="col-lg-4"></div>
</div>
</section>
<div class="fixed-bottom">
{% include 'blog/footer.html' %}
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct"
crossorigin="anonymous"></script>
<script>
function selectRegion(){
let selectRegionValue = document.getElementById('region').value;
console.log(selectRegionValue);
document.getElementById('tenantId').value = "{{ user.nhn_obstg_tntid }}";
}
</script>
<script>
function createClickMsg(){
alert('Object Storage 리스트가 조회됩니다.');
}
</script>
</body>
</html>

View File

@ -0,0 +1,37 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="container">
<div class="row justify-content-between">
<div class="mt-5">
<h1>
주의 사항</h1>
<p>
<ul>
<li>InternetGateway는 사용 전 미리 생성해두어야 합니다(NHN Cloud API 기능 미제공).</li>
<li>Compute Instance의 TenantId정보가 필요합니다..</li>
<li>Object Storage 기능을 사용하려면 ObjectStorage의 TenantId정보가 필요합니다..</li>
<hr>
<li>VPC 삭제 시 Detach(연결해제) 옵션으로 삭제하면 InternetGateway를 재사용 할 수 있습니다.</li>
<ul>
<li>`NHN Cloud API` &gt; 관리대장 &gt; 인터넷 게이트웨이'에 수동 등록관리하여 사용을 권장합니다.</li>
</ul>
<li>Region 별로 KeyPair를 미리 생성해주세요.</li>
<ul>
<li>판교: keyPair-kr1</li>
<li>평촌: keyPair-kr2</li>
</ul>
<hr>
<li>`Butler DDoCHI`에서 생성한 NHN Cloud리소스가 아닌 다른 방법으로 리소스가 추가 및 생성된 경우 본 솔루션에서 NHN Cloud 리소스를 정상적으로 제어하지 못 할 수 있습니다.
</li>
<hr>
<li>지속 기능 구현 중 입니다...</li>
</ul>
</p>
</div>
</div>
</div>
</section>
{% endblock %}

View File

@ -0,0 +1,222 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<div class="container mt-5">
<div class="row justify-content-between">
{% if target == "tokenErr" %}
<div class="col-lg-12">
<h1>Toekn Identification Get ERR</h1>
<hr>
</div>
<div class="col-lg-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">status</th>
<th scope="col">title</th>
<th scope="col">detail</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ code }} </td>
<td>{{ errTitle }}</td>
<td>{{ errMsg }}</td>
</tr>
</tbody>
</table>
</div>
{% elif target == "infoClusterErr" %}
<div class="col-lg-12">
<h1>Cluster Information Get ERR Message</h1>
<hr>
</div>
<div class="col-lg-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">status</th>
<th scope="col">title</th>
<th scope="col">detail</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ clusterInfoStatus }} </td>
<td>{{ clusterInfoTitle }}</td>
<td>{{ clusterInfoDetail }}</td>
</tr>
</tbody>
</table>
</div>
{% elif target == "infoClusterDetail" %}
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="col-lg-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">name</th>
<th scope="col">status</th>
<th scope="col">config</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ clusterName }} </td>
<td>{{ clusterInfoStatus }} </td>
<td>{{ kubeConfig }}</td>
</tr>
</tbody>
</table>
</div>
<!-- start ObjectStorageList -->
{% elif target == "objectStorageList" %}
{% if objectList %}
<div class="col-lg-12">
<h1>Result Message</h1>
<h6>Object 삭제시 Object에 속한 저장 중인 데이터가 모두 삭제 됩니다.</h6>
<hr>
</div>
{% for var in objectList %}
<div class="col-lg-12">
<table class="table table-striped">
<thead>
<tr>
<th scope="col">No</th>
<th scope="col">Region</th>
<th scope="col">Name</th>
<th scope="col">
delete
</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ forloop.counter }}</td>
<td id="region-{{ forloop.counter }}">{{ region }}</td>
<td id="objStorageNameId-{{ forloop.counter }}">{{ var }}</td>
<td>
<a type="submit" id="delete-{{ forloop.counter }}" class="btn btn-info float-right" href="#" data-bs-toggle="modal" data-bs-target="#deleteModal" onclick="tenantIdToModal();">Delete</a>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
{% else %}
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="row">
<div class="col-lg-8">
<h3>리전에 생성된 Object Storage가 없습니다...</h3>
</div>
<div class="col-lg-2">
<a class="btn btn-primary float-left" href="/nhncloud/">API List</a>
</div>
<div class="col-lg-2">
<a class="btn btn-primary float-left" href="/nhncloud/infoObjectStorageRequest">Create Object</a>
</div>
</div>
{% endif %}
<!-- end ObjectStorageList -->
{% else %}
<div class="col-lg-12">
<h1>Result Message</h1>
<hr>
</div>
<div class="row">
<div class="col-lg-8">
<h3>{{ resultMsg }}</h3>
</div>
<div class="col-lg-2">
<a class="btn btn-primary float-left" href="/nhncloud/">API List</a>
</div>
</div>
{% endif %}
</div>
</div>
<!-- Delete ObjectStorage -->
{% elif target == "objectStorageList" %}
<form method="post" action="{% url 'nhncloud:removeObjectStorage' %}">{% csrf_token %}
<input type="hidden" class="form-control" name="objStrgAccount" id="objStrgAccount" value="{{ user.nhn_obstg_sc }}">
<input type="hidden" class="form-control" name="tenantId" id="tenantId" value="{{ user.nhn_obstg_tntid }}">
<input type="hidden" class="form-control" name="usrEmail" id="usrEmail" value="{{ user.nhnc_id }}">
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModal" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="deleteModalTitle">API 비밀번호를 입력해주세요.</h5>
<button type="button" class="close" data-bs-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="mb-3">
<div class="row">
<div class="col-md-4 form-group">
<label for="region">Region</label>
</div>
<div class="col-md-8">
<select class="form-control" name="region" id="region" readonly>
<option value="select...">select...</option>
<option value="kr1">판교</option>
<option value="kr2">평촌</option>
</select>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="objStorageNameId">Object Name</label>
</div>
<div class="col-md-8">
<input type="text" class="form-control" name="objStorageNameId" id="objStorageNameId" readonly>
</div>
</div>
</div>
<div class="mb-3">
<div class="row">
<div class="col-md-4">
<label for="apiPw">API Password</label>
</div>
<div class="col-md-8">
<input type="password" class="form-control" name="apiPw" id="apiPw">
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-info float-right" onclick="alert('삭제 명령 전송 후 Cluster 리스트가 조회됩니다...')">Request</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<script>
function tenantIdToModal(){
id = event.srcElement.id
var idx = id.indexOf('-') + 1
tenantId = "tenant_id-" + id.substring(idx)
objStorageNameId = "objStorageNameId-" + id.substring(idx)
regionId = "region-" + id.substring(idx)
document.getElementById('region').value = document.getElementById(regionId).innerText
// 오브젝트 스토리지이름
document.getElementById('objStorageNameId').value = document.getElementById(objStorageNameId).innerText
}
</script>
{% else %}
{% endif %}
</section>
{% endblock %}

View File

@ -0,0 +1,10 @@
{% extends 'components/base_nhncloud.html' %}
{% load static %}
{% block main_area %}
<section>
<h1>Token</h1>
{{ state }}
{{ tokenValue}}
</section>
{% endblock %}