Molecule, Automate Testing Tool untuk Ansible Roles

logoMolecule

Dulu jaman masih cuma ngetik di chef, adalah tool namanya kitchen-vagrant yang biasa dipakai untuk ujicoba resep di chef (cookbook). Ansible role yang isinya mirip-mirip buku resep (cookbook) di chef juga butuh tool ujicoba. Ditemukanlah repo molecule di github beserta dokumentasinya!

Mencoba menjalankan role ansible dalam virtualbox, kemudian menguji hasil dari role. Untuk tools uji bawaan molecule adalah Testinfra. Memuaskan.

Molecule sendiri ditulis menggunakan python. Namun dalam pemakaian saya saat ini, saya menggunakan serverspec sebagai tools uji yang notabenenya serverspec ditulis dengan ruby. Dyar.

Untuk tipe OS yang saya gunakan adalah debian jessie64 atau xenial64. OS bawaan dari molecule adalah trusty64.

Mari kita coba!

  1. Dependensi.
    • virtualbox
    • vagrant
    • python pip
    • ansible
    • serverspec (verifier)
  2. Install molecule dep
    $ apt-get install gcc python-pip python-vagrant libssl-dev libffi-dev
    
  3. Install molecule
    $ pip install ansible docker-py molecule
    
  4. Buat role molecule. Perintah ini menghasilkan skeleton ansible role yang rapi sekali. Tinggal menyocokkan aja dengan role yang sudah pernah dibuat
    $ molecule init --role nginx --verifier serverspec
    
  5. Ganti tipe os yang digunakan.
    $ cd nginx
    $ bundle install
    

    Isikan kode dibawah ini pada file molecule.yml

    platforms:
        - name: ubuntu/xenial64
          box: ubuntu/xenial64
          box_url: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/16.04/providers/virtualbox.box
    
  6. Tulis task yang ingin dikerjakan. Isi dengan kode berikut, untuk memasang nginx.
    ---
    # tasks file for nginx
      - name: install apt-transport-https
        apt: name=apt-transport-https update_cache=yes
        become: yes
    
      - name: install packages
        apt: name={{ item }} update_cache=yes force=yes
        with_items:
          - nginx
          - curl
        become: yes
        notify:
          - restart nginx
    
    
  7. Tambahkan handler.
    ---
    # handlers file for nginx
      - name: restart nginx
        service: name=nginx state=restarted
        become: yes
    
  8. Tambahkan unit testing.
    require 'spec_helper'
    
    describe file('/etc/hosts') do
      it { should be_file }
      it { should be_owned_by 'root' }
      it { should be_grouped_into 'root' }
    end
    
    describe service('nginx') do
      it { should be_running }
    end
    
    describe port(80) do
      it { should be_listening }
    end
    
    
  9. Lakukan ujicoba molecule. Sejatinya perintah molecule sangat-sangat mirip dengan kichen-vargrant. Lakukan perintah ini secara berurutan.
    $ molecule --help
    $ molecule status
    $ molecule converge
    $ molecule verifier
    $ molecule test
    $ molecule destroy
    
  10. Melakukan debug.
    Saat melakukan converge, kadang mesin ndak jalan mulus, dan kita butuh login ke mesin. Caranya dengan bantuian ssh. karena terbiasa dengan vagran ssh, perintahnya sedikit berbeda kali ini.

    $ ssh ubuntu@127.0.0.1 -p 2222 -i $(pwd)/nginx/.vagrant/machines/nginx/virtualbox/private_key
    
  11. Implementasi.
    Setelah role ditesting dengan lancar, saatnya memasang rule di mesin produksi. Caranya cukup mudah. Buat file hosts yang isinya ip address server, dan pastikan sudah bisa ssh kesana dengan kunci publik

    [server]
    192.168.1.80
    

    Jalankan ansible playbook dari dir di luar nginx (dir molecule-ansible)

    $ ansible-playbook nginx/playbook.yml -i nginx/hosts --private-key ~/.ssh/id_rsa --user ubuntu
    

Udah, itu aja, semoga pada mendapat pencerahan. Contoh role diatas, bisa diakses di repo github saya. Selamat mencoba

Salam tabik untuk kontributor molecule. Kalian keren!

Estu~

Advertisements