1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# Build Python Packages and Docker Images
## Python Package
### pre-requist
Get the code
```bash
git clone https://git.opnfv.org/moon
cd moon/moonv4
export MOON_HOME=$(pwd)
sudo ln -s $(pwd)/conf /etc/moon
```
Install python wheel
```bash
sudo apt install python3-wheel
```
Install pip twine
```bash
sudo pip install twine
```
Package code, wheel is a new format instead of `tar.gz`
```bash
python setup.py sdist bdist_wheel
```
Upload to PyPi
```bash
twine upload dist/moon_xxx-y.y.y.whl
twine upload dist/moon_xxx-y.y.y.tar.gz
```
Install a package from PyPi
```bash
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
```bash
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
### moon_router
### moon_interface
### moon_manager
### moon_authz
### moon_gui
## 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.
```bash
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.
```bash
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:
```bash
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:
```bash
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!!!
```bash
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
```bash
cd ${MOON_HOME}/moon_interface/tests/apitests
python3 populate_default_values.py scenario/ rbac.py
```
|