Python untuk Adminstrasi dan Operasi

System administration biasa disebut sysadmin merupakan manajemen dari sistem perangkat keras dan perangkat lunak. Tujuan dari sysadmin adalah memastikan sistem komputer dan layanan yang berelasi berjalan dengan baik. Sedangkan tugas dari sysadmin biasanya berupa instalasi perangkat keras baru atau perangkat lunak baru, membuat serta mengatur akun user, merawat sistem komputer seperti server dan database, dan merencanakan respon sistem atas masalah yang terjadi. Keuntungan adanya sysadmin adalah meningkatkan efisiensi, menampilkan sistem yang stabil serta bekerja dengan halus, dan mengidentifikasi masalah sebelum terjadi pada bisnis. Perhatikan kode untuk membuat seorang user:

  • def new_user():
  •   confirm = "N"
  •   while confirm != "Y":
  •          username = input("Enter the name of the user to add: ")
  •          print("Use the username '" + username + "'? (Y/N)")
  •          confirm = input().upper()
  •   os.system("sudo adduser " + username)

Perhatikan kode untuk menghapus seorang user:

  • def remove_user():
  •   confirm = "N"
  •   while confirm != ""Y:
  •        username = input("Enter the name of the user to remove: ")
  •        print("Remove the user : '" + username + "'? (Y/N)")
  •        confirm = input().upper()
  •   os.system("sudo userdel -r " + username)
Perhatikan kode untuk menambahkan seorang user ke sebuah grup:
  • def add_user_to_group():
  •   username = input("Enter the name of the user that you want to add to a group: ")
  •   output = subprocess.Popen('groups', stdout=subprocess.PIPE).communicate()[0]
  •   print("Enter a list of groups to add the user to")
  •   print("The list should be separated by spaces, for example:\r\n group1 group2 group3")
  •   print("The available groups are:\r\n " + output)
  •   chosenGroups = str(input("Groups: "))

  •   output = output.split(" ")
  •   chosenGroups = chosenGroups.split(" ")
  •   print("Add To:)
  •   found = True
  •   groupString = ""

  •   for grp in chosenGroups:
  •     for existingGrp in output:
  •       if grp == existingGrp:
  •         found = True
  •         print("- Existing Group : " + grp)
  •         groupString = groupString + grp + ","
  •     if found == False:
  •       print("- New Group : " + grp)
  •       groupString = groupString + grp + ","
  •     else:
  •       found = False

  •   groupString = groupString[:-1] + " "
  •   confirm = ""
  •   while confirm != "Y" and confirm != "N" :
  •     print("Add user '" + username + "' to these groups? (Y/N)")
  •     confirm = input().upper()
  •   if confirm == "N":
  •     print("User '" + username + "' bit added")
  •   elif confirm == "Y":
  •     os.system("sudo usermod -aG " + groupString + username)
  •     print("User '" + username + '" added)

Penanganan package juga menjadi tugas dari seorang sysadmin. Maksud dari penanganan package adalah dalam hal meng-install atau me-remove, tentu saja tujuannya adalah agar sistem dapat berjalan dengan baik. Perhatikan kode di bawah:

  • def install_or_remove_package():
  •   iOrR = ""
  •   while iOrR != "I" and iOrR != "R":
  •     print("Would you like to install or remove package? (I/R)")
  •     iOrR = input().upper()
  •   if iOrR == "I":
  •     iOrR = "install"
  •   elif iOrR == "R":
  •     iOrR = "remove"

  •   print("Enter a list of packages to install")
  •   print("The list should be separated by spaces, for example:")
  •   print(" package1 package2 package3")
  •   print("Otherwise, input 'default' to " + iOrR + " the default package listed in this program")
  •   packages = input().lower()
  •   if packages == "default":
  •     package = defaultPackages
  •   if iOrR == "install":
  •     os.system("sudo apt-get install " + packages)
  •   elif iOrR == "remove":
  •     while True:
  •       print("Purge files after removing? (Y/N)")
  •       choice = input().upper()
  •       if choice == "Y":
  •         os.system("sudo apt-get --purge " + iOrR + " " + packages)
  •         break
  •       elif choice == "N":
  •         os.system("sudo apt-get " + iOrR + " " + packages)
  •     as.system("sudo apt autoremove")

  • def clean_environtment():
  •   os.system("sudo apt-get autoremove")
  •   os.system("sudo apt-get autoclean")

  • def update_environment():
  •   os.system("sudo apt-get update")
  •   os.system("sudo apt-get upgrade")
  •   os.system("sudo apt-get dist-upgrade")

Python sebagai bahasa pemrograman tentu terus melakukan pengembangan. Di tahun 2022 setidaknya sudah ada python V3. Perkembangan ini tentu akan menghasilkan syntax baru karena adanya modul yang dibuat. Misalnya modul os.system() yang deprecated atau usang kemudian diperbarui menjadi modul subprocess.run(). Perbedaan keduanya adalah subshell. Pada os.system() modulnya berjalan di sebuah subshell yang biasanya bash di linux sedangkan subprocess.run() tidak menggunakan sebuah shell. Alasan utama perubahan tersebut adalah keamanan. Pembuat kode sering terlewat untuk memasukkan string ke os.system() tanpa memeriksa command aktual. Praktek tersebut dianggap berbahaya sebab malwar atau malicious software bisa melewati string untuk menghapus file.

Seperti yang sudah diketahui bahwa sysadmin juga bertugas memitigasi masalah, hal ini biasa disebut debugging yang merupakan proses mengidentifikasi dan menghapus bug atau error di dalam kode. Debugging menjadi sangat kompleks dalam prakteknya karena setiap bahasa memiliki alat tersendiri untuk debugging atau memitigasi kecacatan kode. Error dalam kode harus berhasil ditemukan dan diidentifikasi sebelum dilakukan tindakan perbaikan. Untuk mengaktifkan python debugger gunakan syntax:

  • python -m pdb <filename>

Debugging ada 2 tipe, yaitu static analysis dan dynamic analysis. Yang dimaksud static analysis adalah error yang muncul jika saat kode dijalankan di teks editor muncul pesan error. Static analysis biasanya langsung menjadi satu kesatuan dengan python. Kelemahan dari static analysis adalah waktu yang dibutuhkan lebih lama. Berbeda dengan dynamic yang melakukan analisis aplikasi saat dijalankan. Kekurangan dari dynamic analysis adalah lebih sulit untuk mengisolasi issue dari kode. Assertion biasanya digunakan untuk analisis dinamik. Yang dimaksud assertion adalah pengkondisian seperti if. Karena sysadmin melakukan mitigasi atas masalah yang ada pada kode maka sysadmin perlu melakukan pengujian atau testing. Ada hirarki piramida dari testing, yaitu:

  • Unit tests
    • Menguji satu atau beberapa input dengan sebuah output
  • Integration tests
    • Menguji beberapa unit menjadi sebuah group
  • System tests
    • Menguji apakah software sudah sesuai dengan specific requirements
  • Acceptance tests
    • Menguji apakah sudah sesuai kebutuhan pelanggan, kebutuhan bisnis, hingga ke pengguna final

Jika seorang sysadmin sudah berhasil menguasi tugas-tugas tersebut maka sangat dimunkinkan naik ke tingkat selanjutnya sebagai devops atau software development and software operation. Tugas utama dari devops adalah melakukan advokasi untuk otomasi dan memantau semua langkah dari konstruksi perangkat lunak. Devops bekerja terus menerus dalam siklus. Bisa dikatakan bahwa devops adalah continuous improvement. Ada 5 tugas yang dikembangkan oleh seorang devops, yaitu culture, automation, lean, measurement, dan sharing. Secara dramatis devops juga mengubah budaya waterfall menjadi agile. Maksudnya dari budaya saling tunggu-menunggu menjadi langsung bekerja secara bersamaan.

Secara garis besar seorang devops bertanggung jawab untuk menjembatani antara ahli IT tradisional, software developer, dan quality assurance. Karena ada perbedaan arah dan tujuan maka sangat dimungkinkan adanya perbedaan budaya antara divis tersebut. Setidaknya ad 4 tipe budaya, yaitu collaborative (saling memberikan manfaat), adhocratic (tersentralisasi), market (berorientasi pasar), dan hierarchical (memiliki struktur tertentu). Proses yang digunakan adalah CI/CD atau continuous integration/continuous delivery. Untuk menjalankan proses CI/CD diperlukan pemahaman automation yaitu menghilangkan proses yang tidak efisien atau proses yang berulang. Ada 3 hal yang perlu diketahui tentang automation, yaitu over-automation, under-automation, dan bad automation. Semua itu perlu diperhatikan sebagai risiko dari dilakukannya automation. Jadi dalam melakukan automation tidak begitu saja, perlu diperhitungkan.

sumber: aws.amazon.com

Continuous integration adalah otomasi yang membuat kode menjadi tersedia untuk tim. Ada 2 tujuan dari CI, yaitu membuat kode bekerja dengan apa yang sudah selesai dan memastikan kode dapat dibaca oleh orang yang melihat selanjutnya. Maksudnya jangan sampai kode yang dibuat seseorang hanya diketahui dia dan tuhan saja. Nah, continuous delivery merupakan kelanjutan dari CI. Secara tradisional kode dikumpulkan melalui cara manual seperti transfer flashdisk atau email. Sebelum kode dikumpulkan alangkah baiknya digunakan style standar dengan menggunakan pylint dan logic standar dengan menggunakan pytest. Pengumpulan yang lebih modern bisa menggunakan manajemen konfigurasi melalui git.




ref:
aws.amazon.com

Komentar