summaryrefslogtreecommitdiffstats
path: root/docs/com/pres/dockerslicing/dockerslicing.md
blob: 003712c090a1d92d2be1e05082adf4665b898f54 (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
115
116
117
118
119
120
121
122
123
124
# Docker slicing

[Cédric Ollivier](mailto:cedric.ollivier@orange.com)

2017/10/18



## Danube issues


### OPNFV projects' setup.py

- no requirements were installed when calling *python setup.py install* as none of the next keys was set:
    - install_requires
    - tests_require
    - dependency_links
- shell scripts were not installed neither in $PATH nor in dist-packages
- all requirements were not synchronized over the OPNFV projects


### Functest's Dockerfile

- it copied all the files hosted by the third-party projects (e.g. docs, .git...)
- several requirements were downgraded/upgraded when building the container as they were 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 couldn't be removed to save space as it created 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


### 2 OPNFV project proposals

- requirements, the counterpart of [OpenStack requirements](https://wiki.openstack.org/wiki/Requirements),
focused on additional OPNFV project needs
- xtesting which would be declined from Functest (core and ci parts) as proposed in
[Functional testing gating](https://wiki.opnfv.org/display/functest/Functional+testing+gating)



## Thank you!