This project has been moved to a new organization! https://github.com/Yuyu-billing
See our new home at:
- https://yuyu-billing.dev/
- https://github.com/Yuyu-billing/yuyu
- https://github.com/Yuyu-billing/yuyu_dashboard
Yuyu provide ability to manage openstack billing by listening to every openstack event. Yuyu is a required component to use Yuyu Dashboard. There are 3 main component in Yuyu: API, Cron, Event Monitor
Main component to communicate with Yuyu Dashboard.
Provide invoice calculation and rolling capabilities that needed to run every month.
Monitor event from openstack to calculate billing spent.
- Python 3
- Openstack
- Virtualenv
- Linux environment with Systemd
Make sure you installed virtualenv before installing Yuyu
pip3 install virtualenvBilling is a time sensitive application, please make sure you set a correct time and timezone on you machine.
You need to enable notification for this openstack service:
- Nova (nova.conf)
- Cinder (cinder.conf)
- Neutron (neutron.conf)
- Keystone (keystone.conf)
Add configuration below on [oslo_messaging_notifications]
driver = messagingv2
topics = notifications
Add configuration below on [notifications]
notify_on_state_change = vm_and_task_state
notification_format = unversioned
Add configuration below on [oslo_messaging_notifications]
driver = messagingv2
topics = notifications
If you using Kolla, please add configuration above on all service container. For example on Nova you should put the config on nova-api, nova-scheduler, etc.
Clone the latest source code and put it on any directory you want. Here i assume you put it on /var/yuyu/
cd /var/yuyu/
git clone {repository}
cd yuyuThen create virtualenv and activate it
virtualenv env --python=python3.8
source env/bin/activate
pip install -r requirements.txtThen create a configuration file, just copy from sample file and modify as your preference.
cp yuyu/local_settings.py.sample yuyu/local_settings.pyPlease read Local Setting Configuration to get to know about what configuration you should change.
Then run the database migration
python manage.py migrateThen create first superuser
python manage.py createsuperuserA Messaging Queue URL that used by Openstack, usually it is a RabbitMQ URL.
Example:
YUYU_NOTIFICATION_URL = "rabbit://openstack:password@127.0.0.1:5672/"
A list of topic notification topic that is configured on each openstack service
Example:
YUYU_NOTIFICATION_TOPICS = ["notifications"]
By default, it will use Sqlite. If you want to change it to other database please refer to Django Setting documentation.
- https://docs.djangoproject.com/en/3.2/ref/settings/#databases
- https://docs.djangoproject.com/en/3.2/ref/databases/
To install Yuyu API, you need to execute this command.
./bin/setup_api.shThis will install yuyu_api service
To start the service use this command
systemctl enable yuyu_api
systemctl start yuyu_apiAn API server will be open on port 8182.
To install Yuyu API, you need to execute this command.
./bin/setup_event_monitor.shThis will install yuyu_event_monitor service
To start the service use this command
systemctl enable yuyu_event_monitor
systemctl start yuyu_event_monitorThere is a cronjob that needed to be run every month on 00:01 AM. This cronjob will finish all in progress invoice and start new invoice for the next month.
To install it, you can use crontab -e.
Put this expression on the crontab
1 0 1 * * $yuyu_dir/bin/process_invoice.sh
Replace $yuyu_dir with the directory of where yuyu is located. Example
1 0 1 * * /var/yuyu/bin/process_invoice.sh
To update Yuyu manually, you can just pull the latest code
git pull release/xx.xxActivate the virtualenv.
source env/bin/activateChange the setting if needed.
nano yuyu/local_settings.pyUpdate the python package.
pip install -r requirements.txtRun database migration
python manage.py migrateRestart all the service
systemctl restart yuyu_api
systemctl restart yuyu_event_monitor