Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ansible

Okky
April 01, 2018

 Ansible

Automating server setup with Ansible

Okky

April 01, 2018
Tweet

Other Decks in Technology

Transcript

  1. Daftar isi : Overview -- Apa itu Ansible ? --

    Apa saja yang bisa dilakukan dengan ansible ? -- Bagaimana ansible bekerja ? -- Ansible arsitektur Latihan 1.1 -- install ansible -- Konfigurasi ansible host -- setup SSH Keys -- lakukan perintah ping sederhana Sesi bertanya
  2. Ansible Playbook -- Mengenal playbook Latihan 1.2 -- Membuat ansible-playbook

    -- file .yml breakdown -- jalankan ansible-playbook Sesi bertanya Ansible Role -- Mengenal ansible role Latihan 1.3 -- Membuat Role Framework -- Jalankan role Sesi bertanya Penutup
  3. Overview 1.1 -- Apa itu Ansible ? ansible adalah sebuah

    perangkat lunak komputer atau software yang dapat membantu seorang devops atau sistem administrator untuk melakukan otomasi di servernya. -- Apa saja yang bisa dilakukan dengan ansible ? Ansible dapat membantu melakukan instalasi, deployment, bahkan mengupdate sistem server. -- Bagaimana ansible bekerja ? Ansible pada umumnya bekerja seperti tools lain , semacam Chef, Puppet, hanya saja Ansible tidak membutuhkan agent. Ansible hanya bekerja cukup dengan koneksi SSH.
  4. Latihan 1.1 -- install ansible # refreshing the repositories sudo

    apt-get update # install software-properties-common sudo apt-get install software-properties-common # add PPA Ansible to apt source list sudo apt-add-repository ppa:ansible/ansible # renew index package sudo apt-get update # install ansible sudo apt-get install ansible
  5. requirement : server harus sudah terinstall python 2.7 install python

    2.7 # refreshing the repositories sudo apt update # its wise to keep the system up to date! # you can skip the following line if you not # want to update all your software sudo apt dist-upgrade # installing python 2.7 and pip for it sudo apt install python2.7 python-pip
  6. -- Konfigurasi ansible host setting file inventory di sini kita

    bisa masukan ip atau domain dari server yang ingin kita remote. dan bisa kita kelompokan sesuai nama group. sudo nano /etc/ansible/hosts [semua] host1 ansible_ssh_host=192.168.50.22 host2 ansible_ssh_host=192.168.50.33 host3 ansible_ssh_host=192.168.50.44 [staging-doank] host4 ansible_ssh_host=192.168.50.22 [production-doank] host5 ansible_ssh_host=192.168.50.33 [live-doank] host6 ansible_ssh_host=192.168.50.44
  7. -- setup SSH Keys Langkah pertama : Buat Key Pair

    ssh-keygen -t rsa Langkah kedua : Masukkan Passphrase Enter passphrase (empty for no passphrase): Enter same passphrase again: Sekarang kita punya dua file kunci atau key, yaitu : id_rsa , di mana ini adalah kunci pribadi atau private key id_rsa.pub , yang ini adalah kunci publik atau public key
  8. Langkah ketiga : Setting file /etc/ssh/sshd_config pada tiap - tiap

    server yang ingin di remote sudo vi /etc/ssh/sshd_config pada bagian PasswordAuthentication no rubah menjadi yes PasswordAuthentication yes kemudian save dan reload ssh sudo systemctl reload sshd.service
  9. Langkah keempat : Salin kunci publik ke tiap - tiap

    mesin target Kunci publik ini dapat kita pergunakan untuk mengakses server yang ingin kita remote. Kita harus menyalin isi id_rsa.pub ini ke authorized_keys mesin yang ingin kita remote. kita akan di minta masukan password berdasarkan setting kita sebelumnya di file sshd_config. password menyesuaikan dari password vm yang di gunakan. ssh-copy-id [email protected] ssh-copy-id [email protected] ssh-copy-id [email protected]
  10. -- lakukan perintah ping sederhana sekarang kita cek hasil konfigurasi

    kita apakah sudah benar dengan melakukan ping ke server yang ingin kita remote. untuk perintah ping kita dapat lakukan berdasarkan nama group atau nama single server. ping group ansible -m ping semua ping nama server ansible -m ping host1:host2 jika benar hasilnya akan seperti ini host1 | SUCCESS >> { "changed": false, "ping": "pong" }
  11. Agar tidak selalu meminta passphrase pada saat menjalankan ansible command,

    kita bisa setting ssh-agent sebagai berikut. eval `ssh-agent` kemudian add passphrase ssh-add /home/vagrant/.ssh/id_rsa klo sudah bisa mengulangi command ping, tapi kali ini tanpa meminta passphrase.
  12. Ansible Playbook -- Mengenal playbook Ansible playbook adalah cara untuk

    mengirim kan perintah ke server remote dengan cara scripting. ansible playbook di tulis dalam format YAML.
  13. Latihan 1.2 -- Membuat dan menjalankan ansible-playbook Misalkan kita punya

    case ingin otomasi tiap -tiap server yang kita punya dengan setup server nginx. kemudian nanti kita juga akan mengupload file default web di nginx dengan suatu kondisi. sebelum mulai kita buat terlebih dahulu kita buat directory static_files pada directory .ansible/ mkdir static_files
  14. kemudian buat 2 file index 1 dengan format html dan

    1 lagi dengan format php index.nginx-debian.html <html> <head> <title>Ini page demo</title> </head> <body> <h1>Index html</h1> <p>ini regular paragraph. Wow!</p> </body> </html>
  15. sekarang kita coba buat file playbook dengan nama nginx.yml pada

    directory .ansible/ kita buat terlebih dahulu directory playbook pada directory ansible. menjadi .ansible/playbook/ mkdir playbook kemudian buat file nginx.yml vi nginx.yml
  16. isi nya seperti berikut --- - hosts: all tasks: -

    name: Installs nginx web server become: yes apt: pkg=nginx state=present update_cache=true notify: - start nginx - name: Upload default index.nginx-debian.php for host become: yes copy: src=/home/vagrant/.ansible/static_files/index.nginx-debia register: php ignore_errors: False - name: Remove index.nginx-debian.html for host become: yes command: rm -rf /usr/share/nginx/html/index.nginx-debian.html w when: php is success
  17. - name: Upload default index.nginx-debian.html for host become: yes copy:

    src=/home/vagrant/.ansible/static_files/index.nginx-debia when: php is failed handlers: - name: start nginx service: name=nginx state=started note : kita belum mengkonfigurasi php pada server remote jadi walaupun kita upload belum tentu jalan atau dapat di proses. maka kita buat kondisi jika sukses atau gagal.
  18. -- file .yml breakdown ok dari file nginx.yml yang sudah

    kita buat kita akan breakdown supaya tau fungsi - fungsi nya. # ini adalah fungsi awalan dari sebuah script yaml. --- # host adalah server yang kita remote, parameternya bisa all untuk se - host # tasks adalah list dari tugas tertentu yang diberikan ke server. - tasks # name adalah nama dari task yang diberikan. - name # become adalah state untuk memberikan kita hak akses sebagai root. become
  19. # apt adalah ansible module sama hal dengan command apt

    # notify adalah refrensi untuk handler notify # copy adalah sama hal nya dengan apt yaitu ansible module untuk mela copy # register adalah state untuk pengkondisian dari suatu task register # ignore_errors adalah state untuk menyembunyikan/menampilkan notifik ignore_errors # command adalah sama hal dengan command bash di linux command # when adalah kondisi when # handlers sama dengan task tapi jalan berdasarkan kondisi task handlers # service mengacu pada service di os linux service
  20. -- jalankan ansible-playbook sekarang kita bisa jalankan playbook nginx.yml yang

    sudah kita buat. kita bisa menjalankan untuk semua server atau hanya server tertentu yang ingin kita setup. ke semua server ansible-playbook nginx.yml ke salah 1 server tertentu ansible-playbook -l host1 nginx.yml 2 atau lebih ansible-playbook -l host1:host2 nginx.yml
  21. Ansible Role -- Mengenal ansible role Ansible role adalah bentuk

    modular dari playbook. digunakan untuk pengorganisasian playbook sehingga lebih mudah dalam pemeliharaan fungsi - fungsi, jika bertambah banyak dan perlu pemisahan dari playbook untuk job yang berbeda.
  22. Latihan 1.3 -- Membuat Role Framework kita akan membuat directory

    scheme untuk role pada ansible sebagai berikut -- roles --- nginx ---- files ---- handlers ---- meta ---- templates ---- tasks ---- vars
  23. pada directory tasks kita buat file seperti berikut main.yml ---

    - name: Installs nginx web server become: yes apt: pkg=nginx state=present update_cache=true notify: - start nginx - name: Upload default index.nginx-debian.php for host become: yes copy: src=index.nginx-debian.php dest=/usr/share/nginx/html/ mod register: php ignore_errors: False - name: Remove index.nginx-debian.html for host become: yes command: rm -rf /usr/share/nginx/html/index.nginx-debian.html wa when: php is success
  24. - name: Upload default index.nginx-debian.html for host become: yes copy:

    src=index.nginx-debian.html dest=/usr/share/nginx/html/ m when: php is failed - name: Remove index.nginx-debian.html for host become: yes copy: src=index.nginx-debian.html dest=/usr/share/nginx/html/ m when: php is success
  25. copy file static yang sudah kita buat tadi ke directory

    files cp ~/static_files/* ~/roles/nginx/files pada directory handlers kita buat file main.yml sebagai berikut --- - name: start nginx service: name=nginx state=started
  26. terakhir kita buat 1 file dengan nama play.yml di luar

    dari directory framework yang sudah kita buat dan berada di dalam directory ansible. dan isi nya sebagai berikut. --- - hosts: all roles: - role: nginx -- Jalankan role sekarang kita bisa jalankan role yang sudah kita buat ansible-playbook play.yml