[ English | 中文 (简体, 中国) | русский | português (Brasil) | नेपाली | 한국어 (대한민국) | Indonesia | français | español | esperanto | English (United Kingdom) | Deutsch ]
Quickstart¶
Catatan
Bagian ini telah diuji untuk distribusi Horizon di Ubuntu (18.04-amd64) dan berbasis RPM (RHEL 8.x). Jangan ragu untuk menambahkan catatan dan perubahan apa pun sesuai dengan pengalaman atau sistem operasi Anda.
Linux Systems¶
Instal paket prasyarat.
Pada Ubuntu
$ sudo apt install git python3-dev python3-pip gettext
Pada distribusi berbasis RPM (mis., Fedora / RHEL / CentOS)
$ sudo dnf install gcc git-core python3-devel python3-virtualenv gettext
Catatan
Beberapa pengujian mengandalkan browser web Chrome yang sedang diinstal. Meskipun persyaratan di atas akan memungkinkan Anda untuk menjalankan dan menguji Horizon secara manual, Anda perlu menginstal Chrome untuk menjalankan suite pengujian lengkap.
Mempersiapkan¶
To begin setting up a Horizon development environment simply clone the Horizon git repository from https://opendev.org/openstack/horizon.
$ git clone https://opendev.org/openstack/horizon
Selanjutnya Anda perlu mengkonfigurasi Horizon dengan menambahkan file local_settings.py
. Titik awal yang baik adalah menggunakan contoh config dengan perintah berikut, dari dalam direktori horizon
.
$ cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py
Horizon terhubung ke seluruh OpenStack melalui katalog layanan Keystone. Secara default, Horizon mencari titik akhir di http://localhost/identity/v3
; ini dapat dikustomisasi dengan memodifikasi nilai OPENSTACK_HOST
dan OPENSTACK_KEYSTONE_URL
dalam openstack_dashboard/local/local_settings.py
Catatan
Proyek DevStack (http://devstack.org/) dapat digunakan untuk menginstal lingkungan pengembangan OpenStack dari awal. Untuk local.conf yang memungkinkan sebagian besar layanan yang didukung oleh Horizon dikelola, lihat DevStack untuk Horizon
Horizon menggunakan tox
untuk mengelola lingkungan virtual untuk pengujian dan tugas pengembangan lainnya. Anda dapat menginstalnya dengannya
$ pip3 install tox
Lingkungan tox
menyediakan pembungkus di sekitar manage.py
. Untuk informasi lebih lanjut tentang manage.py
, yang merupakan perintah Django, lihat https://docs.djangoproject.com/en/dev/ref/django-admin/
Untuk memulai server pengembangan Horizon gunakan perintah di bawah ini
$ tox -e runserver
Catatan
Port default untuk runserver adalah 8000 yang mungkin sudah dikonsumsi oleh heat-api-cfn di DevStack. Jika berjalan di DevStack tox -e runserver -- localhost:9000`
akan memulai server uji di http://localhost:9000
. Jika Anda menggunakan tox -e runserver
untuk pengembangan, maka konfigurasikan``SESSION_ENGINE`` ke django.contrib.sessions.backends.signed_cookies
dalam file openstack_dashboard/local/local_settings.py
.
Setelah server Horizon berjalan, arahkan web browser ke http://localhost
atau ke IP dan port yang didengarkan server. Masukkan kredensial Keystone Anda, masuk dan Anda akan disajikan dengan dasbor Horizon. Selamat!
Mengelola Pengaturan¶
Anda dapat menyimpan perubahan yang Anda buat ke openstack_dashboard/local/local_settings.py
dengan perintah berikut:
$ python manage.py migrate_settings --gendiff
Catatan
Ini menciptakan file local_settings.diff
yang merupakan perbedaan antara local_settings.py
dan local_settings.py.example
Jika Anda memutakhirkan Horizon, Anda mungkin perlu memperbarui file openstack_dashboard/local/local_settings.py
Anda dengan parameter baru dari openstack_dashboard/local/local_settings.py.example
untuk melakukannya, pertama perbarui Horizon
$ git remote update && git pull --ff-only origin master
Kemudian perbarui file openstack_dashboard/local/local_settings.py
Anda
$ mv openstack_dashboard/local/local_settings.py openstack_dashboard/local/local_settings.py.old
$ python manage.py migrate_settings
Catatan
Ini berlaku openstack_dashboard/local/local_settings.diff
pada openstack_dashboard/local/local_settings.py.example
untuk membuat ulang file openstack_dashboard/local/local_settings.py
. Migrasi kadang-kadang dapat mengalami kesulitan untuk memigrasi beberapa pengaturan, jika ini terjadi Anda akan diperingatkan dengan pesan konflik yang menunjuk ke file openstack_dashboard/local/local_settings.py_Some_DateTime.rej
. Dalam file ini, Anda akan melihat baris-baris yang tidak dapat diubah secara otomatis dan Anda harus mengulang hanya beberapa perubahan ini secara manual daripada memodifikasi file penuh openstack_dashboard/local/local_settings.py.example
.
Ketika semua pengaturan telah dimigrasi, aman untuk membuat kembali perbedaan bersih untuk mencegah Konflik untuk migrasi di masa mendatang.
$ mv openstack_dashboard/local/local_settings.diff openstack_dashboard/local/local_settings.diff.old
$ python manage.py migrate_settings --gendiff
Mengedit Sumber Horizon¶
Meskipun DevStack menginstal dan mengonfigurasi instance Horizon ketika menjalankan stack.sh, pengaturan pengembangan yang disukai mengikuti instruksi di atas pada server/VM yang menjalankan DevStack. Ada beberapa keuntungan untuk mempertahankan salinan repo Horizon yang terpisah, daripada mengedit salinan DevStack yang diinstal.
Perubahan kode sumber tidak mudah hilang saat menjalankan
unstack.sh
/stack.sh
Server pengembangan menerima perubahan kode sumber saat masih berjalan.
Log pesan dan cetak pernyataan langsung ke konsol.
Debugging dengan
pdb
menjadi lebih mudah untuk berinteraksi.
Catatan
Untuk memastikan bahwa perubahan JS dan CSS diambil tanpa restart server, Anda dapat menonaktifkan kompresi dengan COMPRESS_ENABLED = False
di file pengaturan lokal Anda.
Struktur Horizon¶
Proyek ini sedikit berbeda dari proyek OpenStack lain karena memiliki dua komponen yang sangat berbeda di bawahnya: horizon
, dan openstack_dashboard
.
Direktori horizon
berisi pustaka generik dan komponen yang dapat digunakan dalam proyek Django apa pun.
Direktori openstack_dashboard
berisi referensi proyek Django yang menggunakan horizon
.
Jika dependensi ditambahkan ke horizon
atau openstack_dashboard
, mereka harus ditambahkan ke requirement.txt
.
Struktur Proyek¶
Konfigurasi dasbor¶
Untuk menambahkan dasbor baru ke proyek Anda, Anda perlu menambahkan file konfigurasi ke direktori openstack_dashboard/local/enabled
. Untuk informasi lebih lanjut tentang ini, lihat Pluggable Panels dan Groups.
URLs¶
Kemudian Anda menambahkan satu baris ke proyek Anda urls.py
url(r'', include(horizon.urls)),
URL tersebut dibuat secara otomatis berdasarkan aplikasi Horizon yang terdaftar. Jika struktur URL yang berbeda diinginkan dapat dibuat dengan tangan.
Templat¶
Tag templat yang dibuat sebelumnya menghasilkan navigasi. Dalam templat nav.html
Anda, Anda mungkin memiliki yang berikut ini
{% load horizon %}
<div class='nav'>
{% horizon_main_nav %}
</div>
Dan di sidebar.html
Anda, Anda mungkin memilikinya
{% load horizon %}
<div class='sidebar'>
{% horizon_dashboard_nav %}
</div>
Tag templat ini mengetahui dasbor dan panel "aktif" saat ini melalui variabel konteks templat dan akan ditampilkan sesuai dengan itu.
Application Design (desain aplikasi)¶
Structure (struktur)¶
Aplikasi akan memiliki struktur berikut (kami akan menggunakan proyek sebagai contoh)
project/
|---__init__.py
|---dashboard.py <-----Registers the app with Horizon and sets dashboard properties
|---overview/
|---images/
|-- images
|-- __init__.py
|---panel.py <-----Registers the panel in the app and defines panel properties
|-- snapshots/
|-- templates/
|-- tests.py
|-- urls.py
|-- views.py
...
...
Dashboard Classes (kelas dasbor)¶
Di dalam dashboard.py
Anda akan memiliki definisi kelas dan proses pendaftaran
import horizon
....
# ObjectStorePanels is an example for a PanelGroup
# for panel classes in general, see below
class ObjectStorePanels(horizon.PanelGroup):
slug = "object_store"
name = _("Object Store")
panels = ('containers',)
class Project(horizon.Dashboard):
name = _("Project") # Appears in navigation
slug = "project" # Appears in URL
# panels may be strings or refer to classes, such as
# ObjectStorePanels
panels = (BasePanels, NetworkPanels, ObjectStorePanels)
default_panel = 'overview'
...
horizon.register(Project)
Panel Classes (kelas panel)¶
Untuk menghubungkan kelas Panel
dengan kelas Dashboard
dimana Anda mendaftarkannya dalam file panel.py
import horizon
from openstack_dashboard.dashboards.project import dashboard
class Images(horizon.Panel):
name = "Images"
slug = 'images'
permissions = ('openstack.roles.admin', 'openstack.service.image')
policy_rules = (('endpoint', 'endpoint:rule'),)
# You could also register your panel with another application's dashboard
dashboard.Project.register(Images)
Secara default kelas Panel
mencari file urls.py
dalam direktori yang sama dengan panel.py
untuk dimasukkan dalam rollup pola url dari panel ke dashboard ke Horizon , menghasilkan struktur URL yang sepenuhnya dapat diperluas dan dapat dikonfigurasi.
Aturan kebijakan didefinisikan dalam horizon/openstack_dashboard/conf/
. Izin diwarisi dari Keystone dan mengambil bentuk 'openstack.roles.role_name' atau 'openstack.services.service_name' untuk peran pengguna dalam keystone dan layanan dalam katalog layanan mereka.