Build Python Packages and Docker Images ======================================= Python Package -------------- pre-requist ~~~~~~~~~~~ Get the code git clone https://git.opnfv.org/moon cd moon/moonv4 export MOON_HOME=$(pwd) sudo ln -s $(pwd)/conf /etc/moon Install python wheel sudo apt install python3-wheel Install pip twine sudo pip install twine Package code, wheel is a new format instead of `tar.gz` python setup.py sdist bdist_wheel Upload to PyPi twine upload dist/moon_xxx-y.y.y.whl twine upload dist/moon_xxx-y.y.y.tar.gz Install a package from PyPi sudo pypi install moon_xxx --upgrade moon_db ~~~~~~~ - change version in `moon_db/__init__.py` - add `Changelog` moon_utilities ~~~~~~~~~~~~~~ - change version in `moon_utilities/__init__.py` - add `Changelog` moon_orchestrator ~~~~~~~~~~~~~~~~~ - change version in `moon_orchestrator/__init__.py` - add `Changelog` Build All Pip ~~~~~~~~~~~~~ sudo pip3 install pip --upgrade cd ${MOON_HOME}/bin source build_all_pip.sh Container --------- keystone_mitaka ~~~~~~~~~~~~~~~ see `templates/docker/keystone/README.md` to build the `keystone_mitaka` container How to hack the Moon platform ----------------------------- Force the build of components ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you want to rebuild one or more component, you have to modify the configuration file `moon.conf`. For example, if you want to rebuild the moon_interface, got to the `[interface]` section and delete the value of the container key like this: [interface] host=172.18.0.11 port=38001 # Name of the container to download (if empty build from scratch) # example: container=moon/moon_interface:latest container= You can configure the interface, the router and both the security_function and security_policy. You can also force the version of the component like this: `container=moon/moon_interface:4.0.0` Update the moon_interface ~~~~~~~~~~~~~~~~~~~~~~~~~ Go to the directory `${MOON_HOME}/moon_interface` and update the code accordingly to your needs, then update the python package. cd ${MOON_HOME}/moon_interface python setup.py sdist cp dist/moon_interface_* ../moon_orchestrator/dist # kill moon_orchestrator if needed and restart it Update the moon_secrouter ~~~~~~~~~~~~~~~~~~~~~~~~~ Go to the directory `${MOON_HOME}/moon_secrouter` and update the code accordingly to your needs, then update the python package. cd ${MOON_HOME}/moon_secrouter python setup.py sdist cp dist/moon_secrouter* ../moon_orchestrator/dist # kill moon_orchestrator if needed and restart it Problems that may arise ----------------------- If the moon_orchestrator doesn't want to start (with, for example, the following error: `docker.errors.APIError: 409 Client Error: Conflict`), check if the router and interface containers still exist and kill and delete them: docker kill moon_interface docker kill moon_router docker rm moon_interface docker rm moon_router If the moon_orchestrator complains that it cannot request the RabbitMQ server, check if the messenger server is up and running: docker ps # you must see the messenger running here # if not, restart it docker run -dti --net=moon --hostname messenger --name messenger --link messenger:messenger \ -e RABBITMQ_DEFAULT_USER=moon -e RABBITMQ_DEFAULT_PASS=password -e RABBITMQ_NODENAME=rabbit@messenger \ -e RABBITMQ_DEFAULT_VHOST=moon -p 5671:5671 -p 5672:5672 rabbitmq:3-management Configure DB ------------ Relaunch Keystone docker ~~~~~~~~~~~~~~~~~~~~~~~~ If error of `get_keystone_projects()`, then relaunch the Keystone docker, and wait 40 seconds!!! docker rm -f keystone docker run -dti --net moon --name keystone --hostname=keystone -e DB_HOST=db -e DB_PASSWORD_ROOT=p4sswOrd1 -p 35357:35357 -p 5000:5000 keystone:mitaka Add default data in DB ~~~~~~~~~~~~~~~~~~~~~~ Pre-fill the DB with a RBAC policy cd ${MOON_HOME}/moon_interface/tests/apitests python3 populate_default_values.py scenario/ rbac.py