blob: f56cf95806213c537c0eddf70c33139ec3d59cfe (
plain)
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
|
# Docker slicing
[Cédric Ollivier](mailto:cedric.ollivier@orange.com)
2017/10/16
## Danube issues
### OPNFV projects' setup.py
- no requirement is installed when calling *python setup.py install* as none of the next keys are set:
- install_requires
- tests_require
- dependency_links
- shell scripts are not installed neither in $PATH nor in dist-packages
### Functest's Dockerfile
- it copies all the files hosted by the third-party projects (e.g. docs, .git...)
- several requirements are downgraded/upgraded when building the container as they are managed one after the other
- it could download packages from [PyPI](https://pypi.python.org/pypi) (e.g. [networking-bgpvpn](https://pypi.python.org/pypi/networking-bgpvpn)...) instead of cloning git repository
- build dependencies can't be removed to save space as it creates multiple layers (>70)
## Management of the requirements
### Rely on [pbr](https://docs.openstack.org/developer/pbr/)
- pbr injects requirements into the install_requires, tests_require and/or dependency_links arguments to setup
- it supports conditional dependencies which can be added to the requirements (e.g. dnspython>=1.14.0;python_version=='2.7')
### Split requirements into 3 files
- **requirements.txt** which should list all abstract (i.e. [not associated with any particular index](https://packaging.python.org/requirements/)) dependencies of the OPNFV packages
- **test-requirements.txt** which could list all abstract dependencies required for testing the OPNFV packages
- **upper-constraints.txt** which should list all concrete dependencies required by Functest Docker container or the testing virtual environments
### Follow [OpenStack requirements management](https://specs.openstack.org/openstack/openstack-specs/specs/requirements-management.html)
- OPNFV (test-)requirements.txt have been updated according to stable/ocata global-requirements.txt.
- Functest simply use (and complete) stable/ocata upper-constraints.txt in Docker files and tox configuration (testing virtual environments).
### On the road
- we have fixed lots of hardcoded paths hidden by the previous design
- some files were outside the python packages
- lots of (console) scripts added in OPNFV packages to ease the maintenance of Functest testcases.yaml
## Docker slicing
### 8 Functest containers
```bash
$ sudo docker search opnfv |grep functest-
opnfv/functest-core OPNFV Functest core image
opnfv/functest-restapi OPNFV Functest restapi image
opnfv/functest-features OPNFV Functest vnf image
opnfv/functest-healthcheck OPNFV Functest healthcheck image
opnfv/functest-smoke OPNFV Functest smoke image
opnfv/functest-vnf OPNFV Functest vnf image
opnfv/functest-components OPNFV Functest components image
opnfv/functest-parser OPNFV Functest parser image
```
### 8 Functest containers
- Alpine 3.6 is now used as base image
- one container per test suite has been published (5). All of them are built on top of functest-core.
- Parser is hosted in its own containers (it requires librairies released for OpenStack Pike)
- a full container is dedicated to our REST API.
Please see [Run Alpine Functest containers](https://wiki.opnfv.org/display/functest/Run+Alpine+Functest+containers)
## Next steps
### Functest and XCI
- the purpose is simply to allow any OPNFV project integrated by Functest to build their own containers on top of opnfv/functest-core
- it will allow testing one specific change of these OPNFV projects before merging it in tree
- it induces that all requirements are synchronized between the different OPNFV projects
### F-release
- to allow building opnfv/functest-core from a gerrit change (see https://gerrit.opnfv.org/gerrit/#/c/40909/)
- to split Functest core/ci and the Functest testcases in two separated Python packages
- to unlink prepare_env.py and tempest/rally
### F-release
- to add python3 support for Functest ci scripts (Functest core already supports both versions)
- to unlink functest-core from others OPNFV projects (mainly releng and snaps)
- to write a generic Dockerfile using a set of python packages as input
## Thank you!
|