aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INFO6
-rw-r--r--docs/release/release-notes/euphrates.rst137
-rw-r--r--docs/testing/user/configguide/index.rst6
-rw-r--r--docs/testing/user/userguide/cli.rst55
-rw-r--r--opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/0xD60DFB3B-pub.asc55
-rw-r--r--opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/authorized_keys9
-rw-r--r--opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/0xA1BEEBE4-pub.asc55
-rw-r--r--opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/authorized_keys9
-rw-r--r--qtip/ansible_library/modules/mcp.py105
-rw-r--r--qtip/cli/commands/cmd_project.py2
-rw-r--r--qtip/scripts/quickstart.sh2
-rw-r--r--resources/ansible_roles/opnfv-testapi/tasks/report.yml2
-rw-r--r--resources/ansible_roles/qtip-generator/defaults/main.yml1
-rw-r--r--resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml1
-rw-r--r--resources/ansible_roles/qtip-generator/files/compute/host_vars/localhost.yml2
-rw-r--r--resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml14
-rw-r--r--resources/ansible_roles/ramspeed/tasks/main.yml4
-rwxr-xr-xtests/ci/experimental.sh2
-rwxr-xr-xtests/ci/periodic.sh2
-rw-r--r--tests/ci/utils/start_services.sh1
20 files changed, 434 insertions, 36 deletions
diff --git a/INFO b/INFO
index cf674a2b..5d415c9d 100644
--- a/INFO
+++ b/INFO
@@ -1,7 +1,7 @@
Project Name: QTIP, Platform Performance Benchmarking
Project Category: Integration & Testing
-Project Leader: Yujun Zhang <zhang.yujunz@zte.com.cn>
-Primary Contact: Yujun Zhang <zhang.yujunz@zte.com.cn>
+Project Leader: Zhihui Wu <wu.zhihui1@zte.com.cn>
+Primary Contact: Zhihui Wu <wu.zhihui1@zte.com.cn>
Wiki: https://wiki.opnfv.org/display/QTIP
Jira: https://jira.opnfv.org/browse/QTIP
Etherpad: https://etherpad.opnfv.org/p/qtip
@@ -12,9 +12,11 @@ IRC: #opnfv-qtip@freenode
Committers:
+Akhil Batra akhil.batra@research.iiit.ac.in
Morgan Richomme morgan.richomme@orange.com
Prabu Kuppuswamy prabu.kuppuswamy@spirent.com
Prakash Ramchandran prakash.ramchandran@huawei.com
+Taseer Ahmed taseer94@gmail.com
Trevor Cooper trevor.cooper@intel.com
Yujun Zhang zhang.yujunz@zte.com.cn
Zhifeng Jiang Jiang.ZhiFeng@zte.com.cn
diff --git a/docs/release/release-notes/euphrates.rst b/docs/release/release-notes/euphrates.rst
new file mode 100644
index 00000000..48058e64
--- /dev/null
+++ b/docs/release/release-notes/euphrates.rst
@@ -0,0 +1,137 @@
+.. This work is licensed under a Creative Commons Attribution 4.0 International License.
+.. http://creativecommons.org/licenses/by/4.0
+
+*********
+Euphrates
+*********
+
+This document provides the release notes of QTIP for OPNFV Euphrates release
+
+.. contents::
+ :depth: 3
+ :local:
+
+Version history
+===============
+
++--------------------+--------------------+--------------------+--------------------+
+| **Date** | **Ver.** | **Author** | **Comment** |
+| | | | |
++--------------------+--------------------+--------------------+--------------------+
+| 2017-10-20 | Euphrates 1.0 | Yujun Zhang | |
+| | | | |
++--------------------+--------------------+--------------------+--------------------+
+
+Summary
+=======
+
+QTIP Euphrates release continues working on **QPI**, a.k.a. QTIP Performance Index, which is calculated from metrics
+collected in performance tests.
+
+Besides compute performance benchmark, QTIP has integrated OPNFV storperf for storage performance benchmarking.
+
+A PoC of web portal is implemented as the starting point of Benchmarking as a Service.
+
+Release Data
+============
+
++--------------------------------------+--------------------------------------+
+| **Project** | QTIP |
+| | |
++--------------------------------------+--------------------------------------+
+| **Repo/commit-ID** | qtip/euphrates.1.0 |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release designation** | stable version |
+| | |
++--------------------------------------+--------------------------------------+
+| **Release date** | 2017-10-20 |
+| | |
++--------------------------------------+--------------------------------------+
+| **Purpose of the delivery** | release with OPNFV cycle |
+| | |
++--------------------------------------+--------------------------------------+
+
+Version change
+--------------
+
+Module version changes
+^^^^^^^^^^^^^^^^^^^^^^
+
+The following Python packages are used in this release::
+
+ humanfriendly==4.4.1
+ connexion==1.1.11
+ Jinja2==2.9.6
+ Django==1.11.5
+ asq==1.2.1
+ six==1.11.0
+ ansible==2.4.0.0
+ requests==2.18.4
+ prettytable==0.7.2
+ numpy==1.13.1
+ click==6.7
+ pbr==3.1.1
+ PyYAML==3.12
+
+It is considered as a baseline for future releases.
+
+Reason for version
+------------------
+
+Features additions
+^^^^^^^^^^^^^^^^^^
+
+* Storage QPI (QTIP Performance Index) specification and benchmarking project
+
+Framework evolution
+^^^^^^^^^^^^^^^^^^^
+
+Ansible is used as the backbone of QTIP framework. Not only the main testing procedure is built as Ansible roles, but
+also the inventory discovery is implemented as Ansible module, the calculation and collection actions are Ansible
+plugins. Even the testing project itself is generated using jinja2 template rendering driven by Ansible.
+
+Deliverables
+------------
+
+Software
+^^^^^^^^
+
+- `QTIP Docker image <https://hub.docker.com/r/opnfv/qtip>`_ (tag: euphrates.1.0)
+
+Documentation
+^^^^^^^^^^^^^
+
+- `Installation & Configuration <http://docs.opnfv.org/en/stable-euphrates/qtip/docs/testing/user/configguide>`_
+- `User Guide <http://docs.opnfv.org/en/stable-euphrates/submodules/qtip/docs/testing/user/userguide>`_
+- `Developer Guide <http://docs.opnfv.org/en/stable-euphrates/submodules/qtip/docs/testing/developer/devguide>`_
+
+Known Limitations, Issues and Workarounds
+=========================================
+
+Limitations
+-----------
+
+- Supporting on legacy OPNFV fuel installer is no longer maintained.
+
+Known issues
+------------
+
+Test Result
+===========
+
+QTIP has undergone QA test runs with the following results:
+
++---------------------------------------------------+--------------------------------------+
+| **TEST-SUITES** | **Results:** |
+| | |
++---------------------------------------------------+--------------------------------------+
+| qtip-verify-euphrates | 53/53 passed, 86% lines coverage |
+| | |
++---------------------------------------------------+--------------------------------------+
+| qtip-compute-apex-euphrates | passed |
+| | |
++---------------------------------------------------+--------------------------------------+
+| qtip-storage-apex-euphrates | passed |
+| | |
++---------------------------------------------------+--------------------------------------+
diff --git a/docs/testing/user/configguide/index.rst b/docs/testing/user/configguide/index.rst
index ce733666..fa893e5e 100644
--- a/docs/testing/user/configguide/index.rst
+++ b/docs/testing/user/configguide/index.rst
@@ -4,9 +4,9 @@
.. (c) 2016 ZTE Corp.
-*********************************
-QTIP Installation & Configuration
-*********************************
+***********************
+QTIP Installation Guide
+***********************
.. toctree::
:maxdepth: 2
diff --git a/docs/testing/user/userguide/cli.rst b/docs/testing/user/userguide/cli.rst
index 8a983155..f0894b01 100644
--- a/docs/testing/user/userguide/cli.rst
+++ b/docs/testing/user/userguide/cli.rst
@@ -7,7 +7,7 @@ CLI User Manual
***************
QTIP consists of a number of benchmarking tools or metrics, grouped under QPI's. QPI's map to the different
-components of a NFVI ecosystem, such as compute, network and storage. Depending on the type of application,
+components of a NFVi ecosystem, such as compute, network and storage. Depending on the type of application,
a user may group them under plans.
Bash Command Completion
@@ -26,53 +26,60 @@ QTIP CLI provides interface to all of the above the components. A help page prov
along with a short description.
::
- qtip [-h|--help]
+ qtip --help
Usage
=====
-Typically a complete plan is executed at the target environment. QTIP defaults to a number of sample plans.
-A list of all the available plans can be viewed
+QTIP is currently supports two different QPI's, compute and storage. To list all the supported QPI
::
- qtip plan list
+ qtip qpi list
-In order to view the details about a specific plan.
+The details of any QPI can be viewed as follows
::
- qtip plan show <plan_name>
+qtip qpi show <qpi_name>
-where *plan_name* is one of those listed from the previous command.
-
-To execute a complete plan
+In order to benchmark either one of them, their respective templates need to be generated
::
- qtip plan run <plan_name> -p <path_to_result_directory>
+ qtip create --project-template [compute|storage] <workspace_name>
+
+By default, the compute template will be generated. An interactive prompt would gather all parameters specific to
+OpenStack installation.
-QTIP does not limit result storage at a specific directory. Instead a user may specify his own result storage
-as above. An important thing to remember is to provide absolute path of result directory.
+Once the template generation is complete, configuration for OpenStack needs to be generated.
::
- mkdir result
- qtip plan run <plan_name> -p $PWD/result
+ cd <workspace_name>
+ qtip setup
-Similarly, the same commands can be used for the other two components making up the plans, i.e QPI's and metrics.
-For example, in order to run a single metric
+This step generates the inventory, populating it with target nodes.
+
+QTIP can now be run
::
- qtip metric run <metric_name> -p $PWD/result
+ qtip run
-The same can be applied for a QPI.
+This would start the complete testing suite, which is either compute or storage. Each suite normally takes about
+half an hour to complete.
-QTIP also provides the utility to view benchmarking results on the console. One just need to provide to where
-the results are stored. Extending the example above
+Benchmarking report is made for each and every individual section in a QPI, on a particular target node. It consists of
+the actual test values on that node along with scores calculated by comparison against a baseline.
::
- qtip report show <metric_name> -p $PWD/result
+ qtip report show [-n|--node] <node> <section_name>
+
Debugging options
=================
-Debug option helps identify the error by providing a detailed traceback. It can be enabled as
+QTIP uses Ansible as the runner. One can use all of Ansible's CLI option with QTIP. In order to enable verbose mode
+::
+
+ qtip setup -v
+
+One may also be able to achieve the different levels of verbosity
::
- qtip [-d|--debug] plan run <plan_name>
+ qtip run [-v|-vv|-vvv]
diff --git a/opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/0xD60DFB3B-pub.asc b/opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/0xD60DFB3B-pub.asc
new file mode 100644
index 00000000..308a7385
--- /dev/null
+++ b/opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/0xD60DFB3B-pub.asc
@@ -0,0 +1,55 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: Keybase OpenPGP v1.0.0
+Comment: https://keybase.io/crypto
+
+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
+A2sZKZk3gNbu
+=KMTv
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/authorized_keys b/opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/authorized_keys
new file mode 100644
index 00000000..ea619606
--- /dev/null
+++ b/opt/infra/roles/user/files/aaron - Ke.Yi@spirent.com/authorized_keys
@@ -0,0 +1,9 @@
+---- BEGIN SSH2 PUBLIC KEY ----
+Comment: "rsa-key-20171020"
+AAAAB3NzaC1yc2EAAAABJQAAAQEAlM5lOVfVaoCLqu1ZVf5JKTgGFsYZZyqWAepd
+EYbrPHJFvtbnwsLaQl1gBQMNU8AzBe7KylPIT7UeGATuz3HSGKC01Y/3wkbavDUX
+dmsX8XPXx2UggCdzRg7MQfn4obJCjpK/LetwG9idA1JdeBlGtH5P62QWL5U+EcwY
+E3o2FLFLsVBFbwQ+gZHFe7Ae4qDC0cAElYPAGfpM0azGlJ55YSFtcW3/7OzVbxxf
+TWVMGsuCL5ov8pT9e0R4K520pUJI95A183p6wK7vIXky1pZN7GobG9ATmEX0/1sJ
+vJ8gFH8ek2JK8N/GtrgOFzk55YaxDd3stBH8KWxcBASsWPRC/Q==
+---- END SSH2 PUBLIC KEY ----
diff --git a/opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/0xA1BEEBE4-pub.asc b/opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/0xA1BEEBE4-pub.asc
new file mode 100644
index 00000000..9d5dece1
--- /dev/null
+++ b/opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/0xA1BEEBE4-pub.asc
@@ -0,0 +1,55 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: Keybase OpenPGP v1.0.0
+Comment: https://keybase.io/crypto
+
+xsBNBFnpuSUBCADsIh6JYWQhTIC8uZVOtpYGSM5ZU01lKj85sVlCAPtam1ewsrrg
+KO5s8hE/FnyAeokzBKYJpluBbBwf9p+U1t8tKRvRTu8VIUA0gRfRfsLBR7TYgiTC
+Tzdw849Q/o7fzWJmu6aRx8d2r75bs+5l7unedPO/9p9J0OKxTjTD2ugyQM8mwFBP
+byKTy4aVtxm7t6WRi57ZpyEhqbNAZQ10f114pGhJUSP5NRjXbDJA+wWlIRL/kXdZ
+6dPMfNCIZt27IjhZSkAXDB7VECrFuky0DRJUuiicjZrYeEjI53QWDPmEHybVIhIb
+66RABEArx8qyXY7KNQOLUnlB+PlUKgUAFiM7ABEBAAHNHHFkYWkgPFFpYW5nLkRh
+aUBzcGlyZW50LmNvbT7CwG0EEwEKABcFAlnpuSUCGy8DCwkHAxUKCAIeAQIXgAAK
+CRCgsNY9ob7r5L6aCACuMo7lIxcHKhkpXv11BBnSJJwBJwaxYoMJMYPgQU94K6pP
+bk3xdGukF2EFA9vMZ7e54H+HdhX/14rOw3s7sBMMN8MZqwmaKxjj8vJOM1VSoNVv
+jVzIAyX5b7029bySphS+XMZtrKS2SMtDlgx9cFglMlYQJkd2TilKfNqW2MZIvqqQ
+6xvrSgikQagv/4aJPsQyFQrgixOvrECIJzb6IBjyJIegjdTnY8gkQGdWVkMyux/L
+4dRFaGC8y++rzsSsrrutud3nCtZb2nef5klTn2jFavfqamQ98aMyNRw6peB6rHzD
+pM+1iMP8NLXMh9vvRyCbzGFN9aytR6a5kiQ9/QqhzsBNBFnpuSUBCAC2gZQjc8Gc
+pymHykhqVcOqRKEEqGHWWlteXdcz14g7R/PFEXTfwF+iuKVHfNxaprPSuEjsdT3B
+AhMzQYcjEDvebUGe/42TnS5jjzKVqveBhga8m0A9UqPTiNehlc4wPJhPF7U/4JPo
+WTWaMn6etVt/gZs9pX+aGw9KEE+fYhchQf0Kb9tHqjBiNlVkhnqDEvEOvaYhgXWu
+a+j7u6j23j+4ZCF35Ohy7h6cEtKJ24FnRDEXvoHASWxVdQKX48QoJyX9HSA/7rMc
+BSbBZwfK8qc/OiKGvzXTMghBTcxalwAzoULJrf4Ia06EenFLygr2rYyKA1tdSUHY
+Nx/YhF/w70C9ABEBAAHCwYQEGAEKAA8FAlnpuSUFCQ8JnAACGy4BKQkQoLDWPaG+
+6+TAXSAEGQEKAAYFAlnpuSUACgkQ3iZTXCcWZYYiEQf/d9is/ll2ntF7N1iVzmop
+6TaqxDL7YM5kyL+4DbeS8tnvawE0Nqr2uxtKIvx3sLNkhHizt2+r1XoXzXJ5eN2N
+s1QbqCYavsenA8vzcp3SeL2EJuDQIRLWGSY5szEu1CUAiVR12H/Q2klJeaj/rntz
+pL5Yxa/p+b8MRRftd1HwX43QdvIrFLLJIFROvKOWOgm9pOO8oCEhXdkMb8Nh8s+w
+bTQKYkuZsE+R+NGcOVKUrOdV5sPXMyrNPLX9MPpuiqOxqTMLh8KajLAWbunMCwya
+Xls7FEhnVPdSUij+q5Uz5NJN7DVVOqo8Qsk5bgjciHueFT7GjWF8r0hE1sm6e3Gh
+rygoB/wKVvUD0GY5CCb3SFMSGzbZ+eWzH/QVCrfISwos4quOk8a5djfmPuqdGXzs
++DgAosgww1pG/wLWnRHTwi9z8rTuEFHEY26/pxxGVs2VZmFVWAuca8r+MtSRmAe7
+2nRiXCRFgMmgte/rhhftGeuqSVlY7S564tsd1vCpJs7RxltGdebsKmHE/7Ri//dV
+r6V5kcpVtD+zEja57D9tATkDF1ufal4ehhMKdjAsFJ2RGl/XPZH9PQtnvQyXf+kc
+c2IJCg2wc/JWFxJ0v6yjv8XCLXxIOkF/3dZYxn4pod08dub9+UuI2mCJxsw7Hpv+
+28qW/qt5GCRFF/SrTzu85RvqRoU6zsBNBFnpuSUBCACrgScxMfzh49jKrUeAMJpJ
+KoFUcUf6PoHECxXoTyWwzlkyWYDCkd6RbenCy3VSX4ghHOR3cUuydpjk/scSKc3b
+y7gtyN49HxysMl5ggE++7KrM025A4bXd1S07xkmjQtnvrPuKm1G1wNhW1OA8dP5f
+HhAbtO9UShsXLXO3Xig1nF7KpRDD6CMPRenO4QFAhpm1iV+bDfbNXDGugFxXTCMb
+4F9o3p8e2jBcdKc/ff3Y+s9NvrlfEi/wl8fffIClD6z+k7cPkUvcvod85UMj++8O
+3XjnyfYCRpOKDvbtq2f0T+rs4Z5u9n8eTFH26vj1rnIl1L7qgF02ZpWxCXL//Lch
+ABEBAAHCwYQEGAEKAA8FAlnpuSUFCQ8JnAACGy4BKQkQoLDWPaG+6+TAXSAEGQEK
+AAYFAlnpuSUACgkQn17OiilfY2+PDwf7BuXA0kfm46rBTy+eviYKrkmfkNHDUAgl
+5V1AlPLVi9XAjHbvk0JLBJ6ZodxIrpEGgUMxRfdC8ZTEMNMJupccZzLlavK6uNgt
+qugn2jyspTJVHrCVxKdTdis+GvezCSXjJE9dCCTuPu7r7Ny3AJq/R3MA13+/koC+
+FQwNyS3g9oi4J4gw/3ZYA6CESzWT2ct/bwcasLic4SwobIlQoC3HAJyD++vc9Fup
+I/WVDndwOAYsMrq+4Nv6lW67gD8UXrYOBNVcyNM6qAIK7JzF7m/TbueCxmHWZ71Q
+ADEW8K4v3mRgHm6trbSljOHrSXeDXTHI/gD+w8GoPzMVZEb5L8uqBpEyCADXEf8T
+fsjwXePw6Y4VHLQieKUEnX+qFjCOb/D1Skpma8H8gKmE9YmffBhaTk8u+Yq1TGiP
+hYfX1nF+1g1IHQb7gjnmdR7ukPcD20aZ+nT5yKjXgk5qNB40w5ZoGDTUFOTNn5Qj
+HfJ0qKQRsxcwt7P86E3+pKLFym0vN0BQQfuX5+ypevkMvekziWAXxMWdGUEUHh4D
+mwYDQ/TsGpcDpgHHl4XGEmCwpoBv2duQTFiQWj6emuPJzKRG8wvLUVFYsiG+yXeQ
+PSBGwudereQE6oxrbwFynpbRjdp/kSICMc22g/S73awA104NQpbzhEqFlTYd/GvL
+hLM4H3qvAAJZBGW+
+=+YJ3
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/authorized_keys b/opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/authorized_keys
new file mode 100644
index 00000000..50c2e0ac
--- /dev/null
+++ b/opt/infra/roles/user/files/qdai - Qiang.Dai@spirent.com/authorized_keys
@@ -0,0 +1,9 @@
+---- BEGIN SSH2 PUBLIC KEY ----
+Comment: "rsa-key-20171020-for-zte-qtip"
+AAAAB3NzaC1yc2EAAAABJQAAAQEAkNlmplTan+ry5XkKpvadRDkZc0tzQK4zZTtC
+6LytdUfWrNTxD5wfMy+hk9CxGnGitqiRgH06YEdBxo+NGD4tOdbOeqdyL9FahbGd
+Z7oUt7pVrBey+6VtXYtZtxCOQ7MDbqGUKPTGsahlGm7VVmfAgrmeh/L1hVRU9BbV
+nW/vT1Uava5n87Wy5x9Peq01+x2KugjXihEhig27pDjmze8wkdcrJN/vGAtxCAKM
+Ydg/5Tflq3PsN+pzRRrec6ht+4pgPfuXPVSrhKk6PTrsJOkzv5IBNOyklUXDf6Uh
+AjD43A4dGNqGuFsheLWGiVQw7CKGA3E1oFG+MBSjvzFthx4EPQ==
+---- END SSH2 PUBLIC KEY ----
diff --git a/qtip/ansible_library/modules/mcp.py b/qtip/ansible_library/modules/mcp.py
new file mode 100644
index 00000000..21be7bcc
--- /dev/null
+++ b/qtip/ansible_library/modules/mcp.py
@@ -0,0 +1,105 @@
+#!/usr/bin/python
+
+###############################################################
+# Copyright (c) 2017 ZTE Corporation and others
+# taseer94@gmail.com
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+import json
+from collections import defaultdict
+
+from ansible.module_utils.basic import AnsibleModule
+
+ANSIBLE_METADATA = {'metadata_version': '1.0',
+ 'status': ['preview'],
+ 'supported_by': 'community'}
+
+DOCUMENTATION = '''
+---
+module: mcp
+short_description: collecting facts from mcp environments
+description:
+ - Use this module to create a dynamic inventory from salt master (mcp).
+version_added: "1.0"
+author: "Taseer Ahmed (@Taseer)"
+options:
+notes:
+requirements:
+ - Host 'salt-master' is in ~/.ssh/config
+'''
+
+RETURN = '''
+ansible_facts:
+ description: facts collected for ansible
+ returned: success
+ type: dictionary
+ contains:
+ hosts:
+ description: host grouped by hostname, cluster, role and manufacture
+ type: dict
+ hosts_meta:
+ description: hosts meta data indexed by hostname
+ type: dict
+'''
+
+EXAMPLES = '''
+---
+- hosts: salt-master
+ tasks:
+ - name: collect facts of mcp hosts
+ mcp:
+ - debug: var=hostvars
+ - name: add compute node to ansible inventory
+ add_host:
+ name: "{{ hosts_meta[item]['ip'] }}"
+ groups: mcp-compute
+ ansible_user: root
+ ansible_ssh_common_args: '-o StrictHostKeyChecking=No -o ProxyJump=salt-master'
+ with_items: "{{ hosts.compute }}"
+- hosts: mcp-compute
+ tasks:
+ - name: check ssh connection
+ ping:
+'''
+
+
+def generate_inventory(nodes):
+ """Generate ansible inventory from node list in json format"""
+ hosts = defaultdict(list)
+ hosts_meta = {}
+ node_meta = {}
+
+ for key, value in nodes.iteritems():
+ if isinstance(value, dict):
+ for k, v in value.iteritems():
+ if k == "fqdn_ip4":
+ node_meta['ansible_ssh_host'] = v[0]
+ node_meta['ansible_user'] = 'root'
+ hosts_meta[key] = node_meta
+ hosts['compute-nodes'].append(node_meta['ansible_ssh_host'])
+
+ return {'hosts': hosts, 'hosts_meta': hosts_meta}
+
+
+def main():
+ module = AnsibleModule(argument_spec=dict())
+
+ cmd = [module.get_bin_path('salt', True), '-C', '-t 5', '--static', '--out=json', 'cmp*', 'grains.item',
+ 'fqdn_ip4', 'host']
+ (rc, out, err) = module.run_command(cmd)
+
+ if rc is not None and rc != 0:
+ return module.fail_json(msg=err)
+
+ nodes = json.loads(out)
+
+ module.exit_json(changed=False, ansible_facts=generate_inventory(nodes))
+
+
+if __name__ == '__main__':
+ main()
diff --git a/qtip/cli/commands/cmd_project.py b/qtip/cli/commands/cmd_project.py
index 325594ad..2836fa69 100644
--- a/qtip/cli/commands/cmd_project.py
+++ b/qtip/cli/commands/cmd_project.py
@@ -50,7 +50,7 @@ def cli():
default='opnfv-pod',
help='Name of pod under test')
@click.option('--installer-type',
- type=click.Choice(['apex', 'fuel', 'manual']),
+ type=click.Choice(['apex', 'fuel', 'manual', 'mcp']),
prompt='OPNFV Installer Type',
default='manual',
help='OPNFV installer')
diff --git a/qtip/scripts/quickstart.sh b/qtip/scripts/quickstart.sh
index 58a12459..826ed656 100644
--- a/qtip/scripts/quickstart.sh
+++ b/qtip/scripts/quickstart.sh
@@ -26,7 +26,7 @@ verify_connectivity(){
fi
sleep 1
done
- error "Can not talk to $ip."
+ echo "Can not talk to $ip."
}
#Getoptions
diff --git a/resources/ansible_roles/opnfv-testapi/tasks/report.yml b/resources/ansible_roles/opnfv-testapi/tasks/report.yml
index bb034d84..0633eafb 100644
--- a/resources/ansible_roles/opnfv-testapi/tasks/report.yml
+++ b/resources/ansible_roles/opnfv-testapi/tasks/report.yml
@@ -26,6 +26,6 @@
scenario: "{{ scenario }}"
start_date: "{{ ansible_date_time.date }}"
stop_date: "{{ ansible_date_time.date }}"
- criteria: "{{ pod_result.score }}"
+ criteria: PASS # regarded as "pass" if execution is done
details:
score: "{{ pod_result.score }}"
diff --git a/resources/ansible_roles/qtip-generator/defaults/main.yml b/resources/ansible_roles/qtip-generator/defaults/main.yml
index 527da6f7..f6714b8d 100644
--- a/resources/ansible_roles/qtip-generator/defaults/main.yml
+++ b/resources/ansible_roles/qtip-generator/defaults/main.yml
@@ -14,6 +14,7 @@ installer_group:
manual: dummy-group
fuel: fuel-masters
apex: apex-underclouds
+ mcp: salt-masters
project_name: 'qtip-project'
project_template: 'compute'
diff --git a/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml b/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml
index 8b90b498..efb2bdb7 100644
--- a/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml
+++ b/resources/ansible_roles/qtip-generator/files/compute/group_vars/all.yml
@@ -20,3 +20,4 @@ installer_group:
manual: dummy-group
fuel: fuel-masters
apex: apex-underclouds
+ mcp: salt-master
diff --git a/resources/ansible_roles/qtip-generator/files/compute/host_vars/localhost.yml b/resources/ansible_roles/qtip-generator/files/compute/host_vars/localhost.yml
index 815e2ea3..cc587c69 100644
--- a/resources/ansible_roles/qtip-generator/files/compute/host_vars/localhost.yml
+++ b/resources/ansible_roles/qtip-generator/files/compute/host_vars/localhost.yml
@@ -13,4 +13,4 @@ project_name: qtip
case_name: "{{ case_name|default('compute') }}"
pod_name: "{{ pod_name|default('qtip-pod') }}"
scenario: "{{ scenario|default('generic') }}"
-version: "{{ version|default('master') }}"
+version: "{{ lookup('env','OPNFV_RELEASE')|default('master') }}"
diff --git a/resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml b/resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml
new file mode 100644
index 00000000..5aed9e75
--- /dev/null
+++ b/resources/ansible_roles/qtip/tasks/gather-facts-mcp.yml
@@ -0,0 +1,14 @@
+##############################################################################
+# Copyright (c) 2017 ZTE Corporation and others.
+# taseer94@gmail.com
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+---
+
+- name: gathering facts for mcp slave nodes
+ mcp: \ No newline at end of file
diff --git a/resources/ansible_roles/ramspeed/tasks/main.yml b/resources/ansible_roles/ramspeed/tasks/main.yml
index dbf16567..6f0b10fc 100644
--- a/resources/ansible_roles/ramspeed/tasks/main.yml
+++ b/resources/ansible_roles/ramspeed/tasks/main.yml
@@ -14,7 +14,9 @@
- name: downloading ramsmp
get_url:
- url: http://www.alasir.com/software/ramspeed/ramsmp-3.5.0.tar.gz
+# alasir.com domain name expired on 2017-09-30 05:47:11
+# url: http://www.alasir.com/software/ramspeed/ramsmp-3.5.0.tar.gz
+ url: http://sources.buildroot.net/ramsmp-3.5.0.tar.gz
dest: "{{ workdir }}"
checksum: "sha256:39fb15493fb3c293575746d56f6ab9faaa1d876d8b1f0d8e5a4042d2ace95839"
diff --git a/tests/ci/experimental.sh b/tests/ci/experimental.sh
index bb9694b7..7fa18f2f 100755
--- a/tests/ci/experimental.sh
+++ b/tests/ci/experimental.sh
@@ -31,7 +31,7 @@ qtip_repo='/home/opnfv/repos/qtip'
docker cp . ${TEST_SUITE}_qtip:${qtip_repo}
docker exec ${TEST_SUITE}_qtip bash -c "cd ${qtip_repo} && pip install -U -e ."
-docker exec -t ${TEST_SUITE}_qtip bash -x ${qtip_repo}/qtip/scripts/quickstart.sh
+docker exec ${TEST_SUITE}_qtip bash -x ${qtip_repo}/qtip/scripts/quickstart.sh
echo "QTIP: Verify ${TEST_SUITE} done!"
exit 0
diff --git a/tests/ci/periodic.sh b/tests/ci/periodic.sh
index 5c488b87..87fa7627 100755
--- a/tests/ci/periodic.sh
+++ b/tests/ci/periodic.sh
@@ -13,7 +13,7 @@ script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source ${script_dir}/utils/start_services.sh
-docker exec -t ${TEST_SUITE}_qtip bash -x /home/opnfv/repos/qtip/qtip/scripts/quickstart.sh
+docker exec ${TEST_SUITE}_qtip bash -x /home/opnfv/repos/qtip/qtip/scripts/quickstart.sh
echo "${TEST_SUITE} QPI done!"
diff --git a/tests/ci/utils/start_services.sh b/tests/ci/utils/start_services.sh
index 3c481be4..5c95ed7e 100644
--- a/tests/ci/utils/start_services.sh
+++ b/tests/ci/utils/start_services.sh
@@ -15,6 +15,7 @@ TEST_SUITE=${TEST_SUITE}
NODE_NAME=${NODE_NAME:-opnfv-pod}
SCENARIO=${DEPLOY_SCENARIO:-generic}
TESTAPI_URL=${TESTAPI_URL:-}
+OPNFV_RELEASE=${OPNFV_RELEASE:-}
EOF
export SSH_CREDENTIALS=${SSH_CREDENTIALS:-/root/.ssh}