Penggunaan Happy

Gunakan flag -h dengan perintah happy-* apa pun untuk melihat bantuan dan daftar opsi untuk perintah tersebut.

File status

Happy menyimpan dan mempertahankan status topologinya dengan cermat dalam file JSON dengan satu data. Dengan file status ini, Happy dapat menjalankan perintah yang sesuai untuk membuat atau menghapus topologi.

File status default terletak di ~/.happy_state.json. Nama status default adalah happy, seperti yang terlihat dalam output happy-state:

happy-state

State Name:  happy

Status paralel

Happy mendukung beberapa status paralel yang ada bersama. Status saat ini ditentukan oleh variabel lingkungan HAPPY_STATE_ID. Jika HAPPY_STATE_ID tidak ada di lingkungan, nilai status default happy akan digunakan.

HAPPY_STATE_ID tidak dibuat selama penginstalan Happy. Buat satu dengan nilai selain state untuk segera beralih ke status Selamat lain.

export HAPPY_STATE_ID="sunny"

Sekarang memeriksa hasil happy-state dalam status yang berbeda:

happy-state

State Name:  sunny

Setiap status dikelola dalam file ~/.${HAPPY_STATE_ID}_state.json-nya sendiri. Untuk beralih antar-status, jalankan perintah export HAPPY_STATE_ID="<state-name>" lagi.

Meng-uninstal dengan status paralel

Jika Anda menggunakan status Happy paralel dan ingin meng-uninstal Happy, pastikan untuk menjalankan happy-state-delete dengan setiap status aktif. Tindakan ini memastikan semua namespace jaringan yang dibuat oleh Happy dihapus dari sistem Anda tanpa memengaruhi konfigurasi jaringan host Linux.

Misalnya, dengan dua status happy dan sunny:

export HAPPY_STATE_ID="sunny"
happy-state-delete
export HAPPY_STATE_ID="happy"
happy-state-delete

Hapus setiap file status paralel secara manual sesuai kebutuhan:

rm -f ~/.sunny_state.json
rm -f ~/.sunny_state.json.lock
rm -f ~/.happy_state.json
rm -f ~/.happy_state.json.lock

Log

Happy mengirim log ke syslog secara default. Pencadangan log kedua dikirim ke /tmp/${HAPPY_STATE_ID}_debug_log.txt.

Untuk melihat log Happy, jalankan happy-state -l di jendela terminal terpisah. Saat Anda memasukkan perintah Happy, log akan menampilkan masalah Happy perintah shell di latar belakang. Ini adalah cara yang baik untuk memahami cara kerja Happy, jika Anda tertarik dengan namespace jaringan Linux.

Misalnya, happy-node-add node00 membuat node Happy. Output log untuk perintah ini adalah:

DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist
DEBUG [Driver:writeState():365] Happy: writing Happy state to file
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up

Semua baris Driver:CallCmd() adalah perintah shell yang dipanggil Happy. Pertimbangkan setiap baris dalam log:

# Check to see if the target namespace (happy000) exists
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 does not exist

# Write the link between node00 and happy000 in ~/.happy_state.json
DEBUG [Driver:writeState():365] Happy: writing Happy state to file

# Create the network namespace for the node
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns add happy000

# Check to see if the target namespace (happy000) exists
DEBUG [HappyHost:_namespaceExists():56] Happy: namespace happy000 exists

# Bring up the loopback interface within the happy000 namespace
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ifconfig lo up

Contoh topologi

Contoh topologi disertakan dalam repositori Happy dan OpenWeave untuk pengujian. Gunakan juga tabel tersebut untuk mempelajari perintah dalam membuat topologi yang kompleks.

Topologi dalam format JSON dan Shell Script.

JSON

File topologi JSON dimuat menggunakan perintah happy-state-load atau weave-state-load. Jika topologi menyertakan Weave, Anda harus menggunakan weave-state-load untuk memuat topologi. Jika tidak, perintah khusus Weave akan dilewati.

Misalnya, topologi tanpa Weave:

happy-state-load thread_wifi_ap_internet.json

Topologi dengan Weave:

weave-state-load three_nodes_on_thread_weave.json

Untuk menyimpan topologi saat ini sebagai file JSON terpisah untuk digunakan nanti (misalnya, skrip kasus pengujian), gunakan happy-shell -s:

happy-shell -s my_topology.json

Tindakan ini akan menyimpan file status topologi di direktori $HOME.

Skrip shell

File topologi skrip shell berisi kumpulan perintah Happy dan Weave untuk membuat topologi di file JSON yang sesuai. Secara default, skrip ini tidak memiliki izin yang dapat dieksekusi. Pengujian dapat dijalankan dengan dua cara:

Dengan menggunakan perintah bash:

bash thread_wifi_ap_internet.sh

Dengan menerapkan izin yang dapat dieksekusi:

chmod +x thread_wifi_ap_internet.sh
./thread_wifi_ap_internet.sh

Konfigurasi

Happy memiliki tiga file konfigurasi:

File KonfigurasiDeskripsi
~/.happy_conf.jsonVariabel konfigurasi untuk penggunaan pribadi atau plugin. Tetapkan nilai ini menggunakan perintah happy-configuration.
<path-to-happy>/happy/conf/main_config.jsonVariabel konfigurasi Primary Happy.
<path-to-happy>/happy/conf/log_config.jsonKonfigurasi log.

Menambahkan variabel konfigurasi

Sebaiknya gunakan perintah happy-configuration untuk menetapkan variabel pribadi atau plugin di luar default yang diperlukan deployment Happy tertentu.

Misalnya, untuk memberi tahu Happy tempat menemukan direktori test-apps Weave untuk skrip pengujian, tetapkan variabel weave_path:

happy-configuration weave_path <path-to-openweave-core>/build/x86_64-unknown-linux-gnu/src/test-apps

Happy menyimpan variabel konfigurasi di ~/.happy_conf.json.

Proses di node

Happy menyediakan perintah untuk memulai dan menghentikan proses dalam node simulasi.

Untuk memulai proses:

happy-process-start <node-name> <custom-process-name> <command>

Misalnya, untuk terus menjalankan ping di node bernama ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Dalam contoh di atas, ContinuousPing adalah nama yang ditentukan pengguna untuk proses yang digunakan Happy untuk mengelola proses. Gunakan happy-process-wait untuk menangguhkan eksekusi proses dan happy-process-stop untuk menghentikan proses.

Output proses ada di /tmp. Misalnya, setelah memulai proses ContinuousPing, periksa direktori /tmp:

ls /tmp/happy*
/tmp/happy_018691_1524087014.192197_ContinuousPing.out

File .out ini berisi output untuk proses ContinuousPing.

Penggunaan sudo

Happy mengubah konfigurasi jaringan yang dikontrol oleh kernel Linux. Karena hanya root yang dapat mengubah konfigurasi kernel, Happy meminta Anda untuk memasukkan sandi sudo selama operasi.

Happy menggunakan variabel lingkungan sistem $SUDO untuk memanggil sudo. Jika $SUDO tidak ditentukan, Happy akan melakukan panggilan sudo normal.

Skrip Python

Setelah penginstalan, paket Happy Python dapat diimpor ke lingkungan Python menggunakan pernyataan import berikut:

import happy

Setiap modul perintah yang ditemukan di /happy diimpor sebagai berikut:

import happy.HappyNodeAdd

Untuk mengambil opsi modul, panggil fungsi option(). Misalnya, untuk mengambil opsi modul HappyNodeAdd:

module options
import happy.HappyNodeAdd
options = happy.HappyNodeAdd.option()