Introduce Euphrates main changes
authorMorgan Richomme <morgan.richomme@orange.com>
Tue, 10 Oct 2017 13:22:25 +0000 (15:22 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Wed, 10 Jan 2018 18:45:14 +0000 (19:45 +0100)
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>
docs/com/pres/euphrates_functest_evolution/euphrates.md [new file with mode: 0644]
docs/com/pres/euphrates_functest_evolution/index.html [new file with mode: 0644]

diff --git a/docs/com/pres/euphrates_functest_evolution/euphrates.md b/docs/com/pres/euphrates_functest_evolution/euphrates.md
new file mode 100644 (file)
index 0000000..49aab16
--- /dev/null
@@ -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 (file)
index 0000000..5b8fb26
--- /dev/null
@@ -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>