Pada bagian sebelum nya kita sudah berkenalan dengan beberapa module Ansibel dan mengetahui notasi baru yaitu handlers dan notify. Kita juga sudah berhasil membuat playbook yang dapat membuat sebuah hosting sederhana memanfaatkan Nginx.
Namun begitu eksekusi playbook di tulisan sebelumnya masih dilakukan lewat shell atau terminal oleh kita secara manual.
Bagaimana kalau kali ini kita integrasikan playbook ansible ini dengan sebuah interface web, sehingga kita bisa membuat sebuah solusi mini web hosting?
Pada tulisan kali ini kita akan membuat sebuah interface berbasis web yang dapat menjalankan playbook yang sebelum nya telah kita buat. Web tersebut akan dibangun menggunakan Django. Mari kita mulai
Langkah pertama adalah install Django web framework dengan perintah
pip install django ansible-runner
Selanjutnya buat proyek django dengan perintah
django-admin startproject minihosting
Masuk ke dalam direktori minihosting yang baru saja terbuat
cd minihosting
Selanjutnya buatlah applikasi hosting dengan perintah
./manage.py startapp hosting
Buat direktori templates untuk menampung template html dengan perintah
mkdir hosting/templates
Buat file hosting/templates/create.html dengan isi seperti berikut
<html> <body> {% if ok %} <h1>Selamat hosting {{ domain }}.hosting.vm sudah terbuat</h1> {% else %} <form action="" method="POST"> {% csrf_token %} <input type="text" id="name" name="name"> <input type="submit" value="Create"> </form> {% endif %} </body> </html>
Edit file hosting/views.py dan isi seperti berikut
from django.shortcuts import render from django.conf import settings from ansible_runner.interface import run def create(request): playbook_path = settings.BASE_DIR / "hosting/hosting.yaml" if request.method == "POST": ok = True domain = request.POST['name'] run(playbook=str(playbook_path), extravars={'user': domain, 'passwd': settings.DEFAULT_PASS}, inventory=settings.INVENTORY) return render(request, 'create.html', locals())
Edit file minihosting/urls.py dan ubah isinya menjadi seperti ini
from django.urls import path from hosting.views import create urlpatterns = [ path('', create, name="create"), ]
Edit file minihosting/settings.py dan ubah bagian INSTALLED_APPS nya menjadi seperti ini
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hosting', ]
Tidak lupa tambahkan text berikut ini dibagian paling bawah minihosting/settings.py
DEFAULT_PASS = 'hosting' INVENTORY = { 'webserver': { "hosts": { 'ubuntu_server' : { 'ansible_host': '192.168.0.245', 'ansible_user': 'bram', 'ansible_password': 'bram', 'ansible_sudo_pass': 'bram' } } } }
Kita pun dapat meng-copy kan file hosting.yaml dari tulisan sebelum nya ke direktori hosting/hosting.yaml serta copy-kan file nginx.j2 ke direktory hosting/templates/nginx.j2
Nah bagian terakhir jalankan django nya dengan perintah
./manage.py runserver
Buka browser dan akses ke http://localhost:8000 akan muncul tampilan seperti ini
Isikan nama domain yang ini anda buat lalu tekan tombol “Create”, tunggu sesaat dan apabila berhasil akan muncul tampilan seperti ini
Seluruh kode dapat diunduh di https://bitbucket.org/freez_meinster/minihosting/. Selamat mencoba