aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorgan Richomme <morgan.richomme@orange.com>2017-10-10 15:22:25 +0200
committerCédric Ollivier <cedric.ollivier@orange.com>2018-01-10 19:45:14 +0100
commitdd447cd344655f41d5721b99c05e169d4dfc0956 (patch)
tree582fbfd3d146359ff0451b099f29f25017ee952d
parentb94eea5dc2d97a5055d2a98b7b330cc52cac5649 (diff)
Introduce Euphrates main changes
6 topics: - functest framework - requirement management - python packages - docker slicing - docker builds - REST API Change-Id: Ib25a2df9f1a723861606355aea95f61d53495794 Signed-off-by: Morgan Richomme <morgan.richomme@orange.com> Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
-rw-r--r--docs/com/pres/euphrates_functest_evolution/euphrates.md281
-rw-r--r--docs/com/pres/euphrates_functest_evolution/index.html52
2 files changed, 333 insertions, 0 deletions
diff --git a/docs/com/pres/euphrates_functest_evolution/euphrates.md b/docs/com/pres/euphrates_functest_evolution/euphrates.md
new file mode 100644
index 000000000..49aab16cd
--- /dev/null
+++ b/docs/com/pres/euphrates_functest_evolution/euphrates.md
@@ -0,0 +1,281 @@
+# Functest
+### Feedback on Euphrates evolutions
+
+2017/10/09
+
+
+### Main Framework evolutions
+ * Functest Framework refactoring
+ * Docker slicing with Alpine
+ * Building Functest dockers
+ * Requirement management...1st time...in OPNFV
+ * Functest API
+
+
+## Functest Framework refactoring
+
+### The framework
+ * Initiated in Danube
+ * Finalized in euphrates
+ * Goal: ease the integration of feature/vnf tests
+
+### See complete presentation on the framework
+http://testresults.opnfv.org/functest/framework/
+
+
+## Docker slicing
+
+
+#### Short story of Functest Docker
+
+
+### Many rivers to cross
+| Version | Comment |
+|-------------|-----------------------------------------------------|
+| Arno | No docker, all tests initiated from the jumphost |
+| Brahmaputra | Introduction of Docker |
+| Colorado | Growth of Historical Docker |
+| Danube | Growth of Historical Docker |
+| Euphrates | Introduction of Alpine |
+
+
+### Focus on the Historical Docker
+ * Based on ubuntu 14.04
+
+| Version | Compressed Size |
+|--------------|-----------------|
+| Brahmaputra | 354 MB |
+| Colorado.1.0 | 627 MB |
+| Danube.1.0 | 713 MB |
+| cvp.0.2.0 | 710 MB |
+
+* src: https://hub.docker.com/r/opnfv/functest/tags/
+
+
+### Introduction to Alpine
+* Alpine Linux is a GNU/Linux distribution based on musl and Busybox
+* Hardened kernel, compiles all user space binaries as position-independent executables with stack-smashing protection.
+* Docker Alpine leverage Alpine Linux: https://docs.docker.com/samples/library/alpine/
+
+
+### Our goals
+* Lighten docker / save bandwidth / save CI resources
+* Slice testing
+* Simplify Requirement management
+* Isolate "exotic" test cases
+
+
+### From 1 to many dockers
+| Docker | Size | Role |
+|-------------|-------|-------------------------------------------------|
+| core | 122MB | baseline (tools, env) |
+| healthcheck | 122MB | OS connectivity, API, DHCP testing |
+| smoke | 131MB | vpings, Tempest/Refstack, Rally, odl, Snaps |
+| features | 214MB | doctor, domino, sdnvpn, sfc, promise, barometer |
+
+
+### From 1 to many dockers
+| Docker | Size | Role |
+|-------------|-------|-------------------------------------------------|
+| components | 122MB | Full Tempest, Full Rally |
+| vnf | 155MB | vIMS, vRouter |
+| parser | 127MB | parser (feature needs pike clients) |
+
+
+### Easy way to run
+src: https://wiki.opnfv.org/display/functest/Run+Alpine+Functest+containers
+ * env: OPNFV env variables
+ * openstack.creds: OpenStack rc file
+
+```
+sudo docker run --env-file env \
+ -v $(pwd)/openstack.creds:/home/opnfv/functest/conf/openstack.creds \
+ -v $(pwd)/images:/home/opnfv/functest/images \
+ opnfv/functest-smoke:euphrates
+```
+
+
+#### Env
+```
+cat env
+INSTALLER_TYPE=Compass
+INSTALLER_IP=XXX
+EXTERNAL_NETWORK=ext-net
+DEPLOY_SCENARIO=os-nosdn-nofeature-ha
+```
+
+
+#### openstack.creds
+```
+cat openstack.creds
+export OS_AUTH_URL=XXX
+export OS_USER_DOMAIN_NAME=XXX
+export OS_PROJECT_DOMAIN_NAME=XXX
+export OS_USERNAME=XXX
+export OS_PROJECT_NAME=XXX
+export OS_PASSWORD=XXX
+export OS_IDENTITY_API_VERSION=3
+```
+
+
+#### Retrieve all the images
+```
+mkdir -p images && wget -q -O- https://git.opnfv.org/functest/plain/functest/ci/download_images.sh | bash -s -- images && ls -1 images/*
+images/CentOS-7-aarch64-GenericCloud.qcow2
+images/CentOS-7-aarch64-GenericCloud.qcow2.xz
+images/CentOS-7-x86_64-GenericCloud.qcow2
+images/cirros-0.3.5-x86_64-disk.img
+images/cirros-0.3.5-x86_64-lxc.tar.gz
+images/cirros-d161201-aarch64-disk.img
+images/cirros-d161201-aarch64-initramfs
+images/cirros-d161201-aarch64-kernel
+images/cloudify-manager-premium-4.0.1.qcow2
+images/img
+images/trusty-server-cloudimg-amd64-disk1.img
+images/ubuntu-14.04-server-cloudimg-amd64-disk1.img
+images/ubuntu-14.04-server-cloudimg-arm64-uefi1.img
+images/ubuntu-16.04-server-cloudimg-amd64-disk1.img
+images/vyos-1.1.7.img
+```
+* could be improved (retrieve only needed images Tier/config)
+
+
+#### Results
+```
++----------------------+--------- + ------+----------+--------+
+| TEST CASE | PROJECT | TIER | DURATION | RESULT |
++----------------------+--------- + ------+----------+--------+
+| vping_ssh | functest | smoke | 01:19 | PASS |
+| vping_userdata | functest | smoke | 01:56 | PASS |
+| tempest_smoke_serial | functest | smoke | 26:30 | PASS |
+| rally_sanity | functest | smoke | 19:42 | PASS |
+| refstack_defcore | functest | smoke | 22:00 | PASS |
+| snaps_smoke | functest | smoke | 41:14 | PASS |
+| odl | functest | smoke | 00:16 | PASS |
+| odl_netvirt | functest | smoke | 00:00 | SKIP |
+| fds | functest | smoke | 00:00 | SKIP |
++----------------------+--------- + ------+----------+--------+
+
+```
+
+
+#### Easy way to customize
+ * Change list of testcase -v your_config.yaml:/usr/lib/python2.7/site-packages/functest/ci/testcases.yaml
+ * Change logger param -v your_logger.ini:/usr/lib/python2.7/site-packages/functest/ci/logging.ini
+
+
+#### Docker slicing technical presentation
+http://testresults.opnfv.org/functest/dockerslicing/
+
+
+
+## Building Functest dockers
+
+
+#### Until Danube
+ * the unique Functest docker was "produced" from Releng
+
+
+#### For Euphrates, build was done on Docker hub
+ * Releng adaptations not ready in time
+ * more capabilities using Docker Hub
+ * Use of private ollivier then official opnfv Docker Hub
+ * Euphrates 5.1: come back to releng with at least same level of features than Docker Hub/Travis CI
+
+
+
+## Requirement management
+Until now, requirements were managed as follow:
+
+
+# ?
+
+
+### Requirement management
+ * Nothing was done
+ * Danube, Colorado, .. dockers may run but no garantee on mid/long term because
+ * No control of upstream or internal project dependencies
+ * the dependencies of the last feature project overwrite the previous ones
+
+
+### Requirement management
+ * Nothing done in any OPNFV project
+ * No dependency list, no reco (e.g. support Python 3)
+ * Only high level wiki declarative intentions for OpenStack (e.g. Euphrates => Ocata)
+ * Nothing equivalent to OpenStack https://releases.openstack.org/ocata/
+
+
+### Functest evolutions
+ * creation of requirements.txt, upper-constraints.text
+ https://git.opnfv.org/functest/tree/requirements.txt
+ https://git.opnfv.org/functest/tree/upper-constraints.txt
+ ```
+ pbr>=1.8 # Apache-2.0
+ PyYAML>=3.10.0 # MIT
+ GitPython>=1.0.1 # BSD License (3 clause)
+ keystoneauth1>=2.18.0 # Apache-2.0
+ python-cinderclient!=1.7.0,!=1.7.1,>=1.6.0 # Apache-2.0
+ python-glanceclient>=2.5.0 # Apache-2.0
+ python-heatclient>=1.6.1 # Apache-2.0
+ ...
+ ```
+ * sync with ocata done manually by Cédric
+
+
+### Functest evolutions
+ * Code of the feature projects under project responsibility
+ * code moved to their own repo
+ * no more mix between Functest and Feature project code
+ * All python OPNFV projects imported properly as python modules
+ * all dependencies a priori under control...
+
+
+
+## Functest Rest API
+
+
+### Introduction
+* A Rest API has been introduced in Euphrates (Linda)
+* Goal: allow third party to invoke Functest resources
+ * pseudo micro services approach
+ * avoid overlap (e.g. deployement of vIMS from other project to run perfo tests)
+src: https://wiki.opnfv.org/display/functest/Functest+REST+API
+
+
+### Functest rest API
+| resource | Methods | Description |
+|-------------|----------|-------------------------------------------------|
+| environment | GET,POST | show, prepare environment |
+| openstack | GET,POST | show, check, clean, update credentials |
+| testcases | GET,POST | list, show, run |
+| tiers | GET,POST | list, show |
+| tasks | GET | Get the result of the task id |
+
+
+### Examples
+```
+curl -X POST --header "Content-Type: application/json" \
+ --data '{"action":"run_test_case", "args": {"opts": {}, "testcase": "vping_ssh"}}' \
+ http://127.0.0.1:5000/api/v1/functest/testcases/action
+{
+ "task_id": "1a9f3c5d-ce0b-4354-862e-dd08b26fc484",
+ "testcase":"vping_ssh"
+}
+```
+
+
+
+## Conclusions
+ * Framework heavily refactored for Euphrates
+ * Better code quality and rules (coverage, pylint, pep8, ..)
+ * Much more "trustable", light and evolutive
+
+
+## Next steps
+ * Still lots of work for Fraser
+ * Adaptation to use it for XCI gating (xTesting)
+ * Generic dockerfile Functest customized docker on demand
+ * split framework and testcases in order to be able to reuse Functest for k8 or even beyond OPNFV
+ * integrate k8 tests
+ * better management of the images
+ * ...
diff --git a/docs/com/pres/euphrates_functest_evolution/index.html b/docs/com/pres/euphrates_functest_evolution/index.html
new file mode 100644
index 000000000..5b8fb260a
--- /dev/null
+++ b/docs/com/pres/euphrates_functest_evolution/index.html
@@ -0,0 +1,52 @@
+<html>
+<head>
+<title>OPNFV Functest Feedback on Alpines</title>
+<meta name="author" content="Cédric Ollivier">
+<meta name="viewport"
+ content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+<link rel="stylesheet" href="../reveal.js/css/reveal.css">
+<link rel="stylesheet" href="../reveal.js/css/theme/white.css">
+<link rel="stylesheet" href="../reveal.js/lib/css/zenburn.css">
+<script>
+var link = document.createElement( 'link' );
+link.rel = 'stylesheet';
+link.type = 'text/css';
+link.href = window.location.search.match( /print-pdf/gi ) ? '../reveal.js/css/print/pdf.css' : '../reveal.js/css/print/paper.css';
+document.getElementsByTagName( 'head' )[0].appendChild( link );
+</script>
+</head>
+<body>
+ <div class="reveal">
+ <div class="slides">
+ <section data-markdown="euphrates.md" data-separator="^\n\n\n"
+ data-separator-vertical="^\n\n" data-separator-notes="^Note:"></section>
+ </div>
+ </div>
+ <script src="../reveal.js/lib/js/head.min.js"></script>
+ <script src="../reveal.js/js/reveal.js"></script>
+ <script>
+ Reveal.initialize({
+ dependencies : [ {
+ src : '../reveal.js/plugin/markdown/marked.js',
+ condition : function() {
+ return !!document.querySelector('[data-markdown]');
+ }
+ }, {
+ src : '../reveal.js/plugin/markdown/markdown.js',
+ condition : function() {
+ return !!document.querySelector('[data-markdown]');
+ }
+ }, {
+ src: '../reveal.js/plugin/highlight/highlight.js',
+ async: true,
+ callback: function() {
+ hljs.initHighlightingOnLoad();
+ }
+ }, {
+ src: '../reveal.js/plugin/notes/notes.js',
+ async: true
+ } ]
+ });
+ </script>
+</body>
+</html>