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 deps. saya sarankan memasang pip dari getpip.py
    $ 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 --driver docker
    
  5. Ganti tipe os yang digunakan.
    $ cd nginx
    $ bundle install
    

    Isikan kode dibawah ini pada file molecule.yml

    driver:
      name: docker
    docker:
      containers:
        - name: nginx
          image: ubuntu
          image_version: latest
          ansible_groups:
            - group1
    
  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
          - net-tools
        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.

    $ molecule login
    
  11. Pengaturan Implementasi.
    Setelah role ditesting dengan lancar, saatnya memasang rule di mesin produksi. Saya menambahkan beberapa variable sesuai lingkungan. Yaitu folder environment dengan struktur seperti berikut:

    Untuk ujicoba, buatlah sebuah virtual dengan pengaturan IP static (contoh: 192.168.1.1). Atur agar bisa ssh menggunakan kunci publik dan memiliki akses sudo tanpa password.

    [server]
    192.168.1.1
    

    Kemudian ditambah variable khusus tiap env

    ---
    env_name: Staging
    
  12. Implementasi:
    Jangan lupa memastikan agar dari komputer kita sudah bisa ssh ke mesin tujuan dengan kunci publik dan memiliki akses sudo tanpa password. Kemudian jalankan ansible-playbook.

    $ ansible-playbook nginx/playbook.yml -i nginx/environment/staging --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