Selamat Menggunakan

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

File status

Happy Store dan mempertahankan status topologinya dengan cermat dalam file JSON dengan satu data. Dengan menggunakan 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 berdekatan. Status saat ini di 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 nilai dengan nilai selain state untuk segera beralih ke status Happy lainnya.

export HAPPY_STATE_ID="sunny"

Sekarang memeriksa happy-state menghasilkan status yang berbeda:

happy-state

State Name:  sunny

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

Meng-uninstal dengan status paralel

Jika Anda menggunakan Happy status 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 jika diperlukan:

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. Cadangan log kedua dikirim ke /tmp/${HAPPY_STATE_ID}_debug_log.txt.

Untuk melihat log Happy, jalankan happy-state -l di jendela terminal yang terpisah. Saat Anda memasukkan perintah Happy, log akan menampilkan perintah Shell Happy 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. Selain itu, gunakan keduanya untuk mempelajari perintah untuk membuat topologi yang kompleks.

Topologi menggunakan format JSON dan Shell Script.

JSON

File topologi JSON dimuat menggunakan perintah happy-state-load atau weave-state-load. Jika topologi mencakup 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

Guna menyimpan topologi Anda 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 dalam file JSON yang sesuai. Skrip ini secara default tidak memiliki izin yang dapat dieksekusi. Iklan ini 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 Happy primer.
<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 letak 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

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

Proses dalam node

Happy menyediakan perintah untuk memulai dan menghentikan proses dalam node yang disimulasikan.

Untuk memulai proses:

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

Misalnya, untuk terus menjalankan ping pada node bernama ThreadNode:

happy-process-start ThreadNode ContinuousPing ping 8.8.8.8

Pada 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 berada 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 akan meminta Anda untuk memasukkan sandi sudo selama operasi berlangsung.

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

Pembuatan skrip Python

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

import happy

Modul perintah individual 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()