renodesperAvatar border
TS
renodesper
Belajar dan Mengenal Fabric


Fabric adalah suatu pustaka bahasa python yang biasa digunakan oleh para system administrator untuk melakukan proses deployment maupun persiapan sebelum deployment dilakukan. Selain Fabric, ada juga yang dinamakan Ansible yang sudah dibuat thread-nya oleh agan mombasa87.

Berbeda dengan Ansible, Fabric dikontrol dengan menggunakan sebuat file berbahasa python yang tentunya bisa kita modifikasi selama kita mengerti bahasa pemrograman python. File tersebut yang biasa disebut dengan fabfile, hanya memerlukan 3 baris kode untuk membuat sebuah task, 2 baris jika kita mengasumsikan bahwa baris import tidak dihitung. Berikut contoh sebuat task pada Fabric:
Code:
from fabric.api import run

def hello():
return run('echo "hello"')


Fungsi rundi atas digunakan untuk menjalankan sebuah perintah echo di remote server. Tentu saja kita bisa menjalankan perintah apapun selama perintah tersebut dapat dikenali oleh sistem yang dituju. Selain fungsi run, ada beberapa fungsi lain yang bisa digunakan di Fabric. Beberapa diantaranya yang pernah saya gunakan adalah sebagai berikut:
  • env: fungsi ini berfungsi untuk mengatur environment saat program dijalankan. Beberapa hal yang bisa kita atur dengan env adalah user, password, dan hosts.
  • put: fungsi put berfungsi untuk melakukan proses upload ke remote server dari local. Tentu saja lokasi folder di remote server harus kita tentukan terlebih dahulu.
  • with: fungsi with biasanya digunakan berdampingan dengan fungsi lain seperti cd, lcd, settings, dan masih banyak lagi. Fungsi ini berfungsi untuk memberikan suatu kondisi yang nantinya hanya berlaku dalam 1 blok kode tersebut saja. Fungsi cd berfungsi untuk berpindah folder di remote server dan lcd untuk berpindah folder di komputer local. Fungsi setting sendiri berfungsi untuk mengatur environment secara temporal untuk blok kode tertentu saja.
  • execute: fungsi ini berfungsi untuk mengeksekusi suatu task dari task yang lain. Dengan ini kita bisa melakukan chaining task untuk memudahkan alur deployment.
  • local: fungsi local berfungsi untuk menjalankan suatu perintah di komputer local yang kita gunakan.
  • run: berbeda dengan fungsi local, fungsi run berfungsi untuk menjalankan suatu perintah di remote server yang akan kita gunakan pada proses deployment.
  • runs_once: fungsi runs_once berfungsi untuk mengatur agar suatu task dieksekusi sebanyak 1 kali saja.
  • task: fungsi ini berfungsi untuk menunjukan bahwa fungsi tersebut (yang memiliki tanda anotasi task) adalah sebuah task yang nantinya bisa kita jalankan dengan menggunakan Fabric.


Masih banyak fungsi - fungsi / perintah - perintah lain yang bisa kita gunakan, semua itu kembali kepada kebutuhan dan kreativitas kita saat melakukan pekerjaan menggunakan Fabric. Selain untuk proses deployment, Fabric juga dapat digunakan untuk melakukan fungsi otomatisasi pada komputer local, misalnya penginstalan aplikasi dan aplikasi - aplikasi pendukung environment kerja. Berikut saya sertakan contoh beberapa baris kode yang saya gunakan untuk pengaturan environment kerja di sisi server:
Code:
from getpass import getpass
import os

from fabric.api import *

__author__ = 'renodesper'

env.user = 'root'
env.password = 'password'
env.hosts = [
'192.168.1.xxx',
'192.168.1.xxx',
]

@runs_once
@task
def help():
print "How to run:"
print " > fab task1 # Without any argument"
print " > fab task1:mode='mode1' # With 1 argument"
print " > fab set_hosts:worker='1;2;3' task1:mode='mode1' # With multiple arguments"
print " > fab set_hosts:worker='4;5' task2:mode='mode2',engine='engine1' # With multiple task & arguments"

@runs_once
@task
def set_hosts(workers=None):
host_list = list()

if workers:
workers = str(workers).split(';')
for worker in workers:
host_list.append('192.168.1.{}'.format(worker))
env.hosts = host_list

@task
def history_format():
run("echo 'export HISTTIMEFORMAT="%d-%m-%y %T "' >> ~/.bashrc")
run("awk '!x[$0]++' ~/.bashrc > ~/.bashrc.temp && mv -f ~/.bashrc.temp ~/.bashrc")

@task
def cron(mode='status', cron_file='cron-job'):
if mode == 'update':
working_directory = '/path/to/working/directory/'
put(cron_file, working_directory)
with cd(working_directory):
run('crontab {0}'.format(cron_file))
else:
run('/etc/init.d/crond {}'.format(mode))


Semoga thread ini bisa membantu agan - agan dalam menjalankan pekerjaannya, mohon maaf jika saya yang newbie ini memiliki kesalahan dalam penyampaian. Saya sangat menerima saran dan kritik agar thread ini dapat menjadi lebih baik dan lebih bermanfaat untuk semua orang. emoticon-Shakehand2
tata604Avatar border
tata604 memberi reputasi
1
1.6K
6
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Urutan
Terbaru
Terlama
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Komunitas Pilihan