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


Avatar photo

Bramandityo Prabowo

Suka makan dan tentu saja suka masak. Tertarik dengan Functional Programing, Distributed System, Network Security, Operating System Customization, Virtualization dan NoSQL. Language of choices nya adalah Python, Bash, Go, Erlang, Nimlang. Rust dan Ocaml.