Adding mechanism to build documentation via sphinx
Change-Id: Iaf1b201ddb6890199dd76ab67022557b7fd0b2fc
This commit is contained in:
parent
fcac21f1bf
commit
6b5b867bdc
15
README.rst
15
README.rst
@ -1,15 +1,17 @@
|
|||||||
|
=========
|
||||||
RefStack
|
RefStack
|
||||||
========
|
=========
|
||||||
|
|
||||||
**What is RefStack?**
|
What is RefStack?
|
||||||
|
#################
|
||||||
|
|
||||||
- Toolset for testing interoperability between OpenStack clouds.
|
- Toolset for testing interoperability between OpenStack clouds.
|
||||||
- Database backed website supporting collection and publication of
|
- Database backed website supporting collection and publication of
|
||||||
Community Test results for OpenStack.
|
Community Test results for OpenStack.
|
||||||
- User interface to display individual test run results.
|
- User interface to display individual test run results.
|
||||||
|
|
||||||
**Overview**
|
Overview
|
||||||
|
##########
|
||||||
|
|
||||||
RefStack intends on being THE source of tools for interoperability testing
|
RefStack intends on being THE source of tools for interoperability testing
|
||||||
of OpenStack clouds.
|
of OpenStack clouds.
|
||||||
@ -40,7 +42,7 @@ after their software has been incorporated into the distro or cloud.
|
|||||||
vendors. It can be used by vendors in house to compare interoperability
|
vendors. It can be used by vendors in house to compare interoperability
|
||||||
data over time.
|
data over time.
|
||||||
|
|
||||||
* API and UI install docs: http://github.com/openstack/refstack/blob/master/doc/refstack.md
|
* API and UI install docs: http://github.com/openstack/refstack/blob/master/doc/source/refstack.rst
|
||||||
* repository: http://git.openstack.org/cgit/openstack/refstack
|
* repository: http://git.openstack.org/cgit/openstack/refstack
|
||||||
* reviews: https://review.openstack.org/#q,status:open+refstack,n,z
|
* reviews: https://review.openstack.org/#q,status:open+refstack,n,z
|
||||||
|
|
||||||
@ -50,7 +52,8 @@ after their software has been incorporated into the distro or cloud.
|
|||||||
* repository: http://git.openstack.org/cgit/openstack/refstack-client
|
* repository: http://git.openstack.org/cgit/openstack/refstack-client
|
||||||
* reviews: https://review.openstack.org/#q,status:open+refstack-client,n,z
|
* reviews: https://review.openstack.org/#q,status:open+refstack-client,n,z
|
||||||
|
|
||||||
**Get involved!**
|
Get involved!
|
||||||
|
###############
|
||||||
|
|
||||||
* Mailing List: openstack-dev@lists.openstack.org
|
* Mailing List: openstack-dev@lists.openstack.org
|
||||||
* IRC: #refstack on Freenode
|
* IRC: #refstack on Freenode
|
||||||
|
230
doc/refstack.md
230
doc/refstack.md
@ -1,230 +0,0 @@
|
|||||||
RefStack Quickstart
|
|
||||||
===================
|
|
||||||
|
|
||||||
You can use docker for [one-click setup](run_in_docker.md)
|
|
||||||
or follow step-by-step instructions below.
|
|
||||||
|
|
||||||
####Install API dependencies (on ubuntu 14.x)..
|
|
||||||
|
|
||||||
- `sudo apt-get install git python-dev libssl-dev python-setuptools`
|
|
||||||
|
|
||||||
- `sudo apt-get install mysql-server python-mysqldb`
|
|
||||||
|
|
||||||
- `sudo easy_install -U pip`
|
|
||||||
|
|
||||||
- `sudo easy_install -U virtualenv`
|
|
||||||
|
|
||||||
####Install RefStack UI dependencies
|
|
||||||
|
|
||||||
- `curl -sL https://deb.nodesource.com/setup | sudo bash -`
|
|
||||||
|
|
||||||
- `sudo apt-get install nodejs`
|
|
||||||
|
|
||||||
####Setup the RefStack database
|
|
||||||
|
|
||||||
- Log into MySQL: `mysql -u root -p`
|
|
||||||
|
|
||||||
- After authentication, create the database:
|
|
||||||
|
|
||||||
`CREATE DATABASE refstack;`
|
|
||||||
|
|
||||||
- Create a refstack user:
|
|
||||||
|
|
||||||
`CREATE USER 'refstack'@'localhost' IDENTIFIED BY '<your password>';`
|
|
||||||
|
|
||||||
or using hash value for your password
|
|
||||||
|
|
||||||
`CREATE USER 'refstack'@'localhost'
|
|
||||||
IDENTIFIED BY PASSWORD '<hash value of your password';`
|
|
||||||
|
|
||||||
- Grant privileges:
|
|
||||||
|
|
||||||
`GRANT ALL PRIVILEGES ON refstack . * TO 'refstack'@'localhost';`
|
|
||||||
|
|
||||||
- Reload privileges:
|
|
||||||
|
|
||||||
`FLUSH PRIVILEGES;`
|
|
||||||
|
|
||||||
- Exit MySQL: `quit`
|
|
||||||
|
|
||||||
####Git you clonin'
|
|
||||||
|
|
||||||
- `git clone http://github.com/openstack/refstack`
|
|
||||||
|
|
||||||
- `cd refstack`
|
|
||||||
|
|
||||||
- Create virtual environment: `virtualenv .venv --system-site-package`
|
|
||||||
|
|
||||||
- Source to virtual environment: `source .venv/bin/activate`
|
|
||||||
|
|
||||||
####Install RefStack application (on ubuntu 14.x)..
|
|
||||||
|
|
||||||
- `pip install .`
|
|
||||||
|
|
||||||
####Install needed RefStack UI library dependencies
|
|
||||||
|
|
||||||
- `npm install`
|
|
||||||
|
|
||||||
####API configuration file preparation
|
|
||||||
|
|
||||||
- Make a copy of the sample config file (etc/refstack.conf.sample) and
|
|
||||||
update it with the correct information of your environment. Examples
|
|
||||||
of the config parameters with default values are included in the
|
|
||||||
sample config file.
|
|
||||||
|
|
||||||
- You should ensure that the following values in the config file are noted and
|
|
||||||
properly set:
|
|
||||||
|
|
||||||
- `connection` field in the `[database]`section.
|
|
||||||
|
|
||||||
For example, if the backend database is MySQL then update:
|
|
||||||
`#connection = <None>` to
|
|
||||||
`connection = mysql+pymysql://refstack:<your password>@x.x.x.x/refstack`
|
|
||||||
|
|
||||||
- `ui_url` field in the `[DEFAULT]` section.
|
|
||||||
|
|
||||||
This should be the URL that the UI can be accessed from. This will likely
|
|
||||||
be in the form `http://<your server IP>:8000` (8000 being the default port
|
|
||||||
RefStack is hosted on). For example: `http://192.168.56.101:8000`
|
|
||||||
|
|
||||||
- `api_url` field in the `[api]` section.
|
|
||||||
|
|
||||||
This should be the URL that the API can be accessed from. This, in most
|
|
||||||
cases, will be the same as the value for `ui_url` above.
|
|
||||||
|
|
||||||
- `app_dev_mode` field in the `[api]` section.
|
|
||||||
|
|
||||||
Set this field to true if you aren't creating a production-level RefStack
|
|
||||||
deployment and are just trying things out or developing. Setting this field
|
|
||||||
to true will allow you to quickly bring up both the API and UI together,
|
|
||||||
with the UI files being served by a simple file server that comes with
|
|
||||||
Pecan.
|
|
||||||
|
|
||||||
####Create UI config file
|
|
||||||
|
|
||||||
From the RefStack project root directory, create a config.json file
|
|
||||||
and specify your API endpoint inside this file. This will be something like
|
|
||||||
{"refstackApiUrl": "http://192.168.56.101:8000/v1"}:
|
|
||||||
|
|
||||||
- `cp refstack-ui/app/config.json.sample refstack-ui/app/config.json`
|
|
||||||
|
|
||||||
####Openstack OpenID endpoint configuration (optional)
|
|
||||||
|
|
||||||
If you are only interested in the uploading and viewing of result sets, then
|
|
||||||
this section can be ignored. However, in order for user accounts and
|
|
||||||
authentication to work, you need to make sure you are properly configured
|
|
||||||
with an OpenStack OpenID endpoint. There are two options:
|
|
||||||
|
|
||||||
* Use the official endpoint [openstackid.org](https://openstackid.org)
|
|
||||||
* Host your own openstackid endpoint
|
|
||||||
|
|
||||||
Since openstackid checks for valid top-level domains, in both options you will
|
|
||||||
likely have to edit the hosts file of the system where your web-browser for
|
|
||||||
viewing the RefStack site resides. On Linux systems, you would modify
|
|
||||||
`/etc/hosts`, adding a line like the following:
|
|
||||||
|
|
||||||
`<RefStack server IP> <some valid domain name>`
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
`192.168.56.101 myrefstack.com`
|
|
||||||
|
|
||||||
On Windows, you would do the same in `%SystemRoot%\System32\drivers\etc\hosts`.
|
|
||||||
Alternatively, you can add a custom DNS record with the domain name mapping
|
|
||||||
if possible.
|
|
||||||
|
|
||||||
Note that doing this requires you to modify the config.json file and the
|
|
||||||
`api_url` and `ui_url` fields in refstack.conf to use this domain name instead
|
|
||||||
of the IP.
|
|
||||||
|
|
||||||
**Option 1 - Use Official Endpoint**
|
|
||||||
|
|
||||||
Using the official site is probably the easiest option as no additional
|
|
||||||
configuration is needed besides the hosts file modifications as noted above.
|
|
||||||
RefStack, by default, points to this endpoint.
|
|
||||||
|
|
||||||
**Option 2 - Use Local Endpoint**
|
|
||||||
|
|
||||||
Instructions for setting this up are outside of the scope of this doc, but you
|
|
||||||
can get started at [https://github.com/openstack-infra/openstackid]
|
|
||||||
(https://github.com/openstack-infra/openstackid)
|
|
||||||
or [https://github.com/fremontlabs/vagrant-openstackid]
|
|
||||||
(https://github.com/fremontlabs/vagrant-openstackid).
|
|
||||||
You would then need to modify the `openstack_openid_endpoint` field in the
|
|
||||||
`[osid]` section in refstack.conf to match the local endpoint.
|
|
||||||
|
|
||||||
####Database sync
|
|
||||||
|
|
||||||
- Check current revision:
|
|
||||||
|
|
||||||
`refstack-manage --config-file /path/to/refstack.conf version`
|
|
||||||
|
|
||||||
The response will show the current database revision. If the revision is
|
|
||||||
`None` (indicating a clear database), the following command should be
|
|
||||||
performed to upgrade the database to the latest revision:
|
|
||||||
|
|
||||||
- Upgrade database to latest revision:
|
|
||||||
|
|
||||||
`refstack-manage --config-file /path/to/refstack.conf upgrade --revision head`
|
|
||||||
|
|
||||||
- Check current revision:
|
|
||||||
|
|
||||||
`refstack-manage --config-file /path/to/refstack.conf version`
|
|
||||||
|
|
||||||
Now it should be some revision number other than `None`.
|
|
||||||
|
|
||||||
|
|
||||||
####Start RefStack
|
|
||||||
|
|
||||||
A simple way to start refstack is to just kick off gunicorn using the
|
|
||||||
`refstack-api` executable:
|
|
||||||
|
|
||||||
- `refstack-api --env REFSTACK_OSLO_CONFIG=/path/to/refstack.conf`
|
|
||||||
|
|
||||||
If `app_dev_mode` is set to true, this will launch both the UI and API.
|
|
||||||
|
|
||||||
Now available:
|
|
||||||
|
|
||||||
- `http://<your server IP>:8000/v1/results` with response JSON including
|
|
||||||
records consisting of `<test run id>` and `<upload date>` of the test runs.
|
|
||||||
The default response is limited to one page of the most recent uploaded test
|
|
||||||
run records. The number of records per page is configurable via the RefStack
|
|
||||||
configuration file. Filtering parameters such as page, start_date, and
|
|
||||||
end_date can also be used to specify the desired records. For example:
|
|
||||||
GET `http://<your server IP>:8000/v1/results?page=n` will return page *n*
|
|
||||||
of the data.
|
|
||||||
|
|
||||||
- `http://<your server IP>:8000/v1/results/<test run id>` with response JSON
|
|
||||||
including the detail test results of the specified `<test run id>`
|
|
||||||
|
|
||||||
####(Optional) Configure Foundation organization and group
|
|
||||||
|
|
||||||
Overall RefStack admin access is given to users belonging to a "Foundation"
|
|
||||||
organization. To become a Foundation admin, first a "Foundation" organization
|
|
||||||
must be created. Note that you must have logged into RefStack at least once so
|
|
||||||
that a user record for your account is created.
|
|
||||||
|
|
||||||
- Log into MySQL: `mysql -u root -p`
|
|
||||||
|
|
||||||
- Create a group for the "Foundation" organization:
|
|
||||||
|
|
||||||
`INSERT INTO refstack.group (id, name, created_at) VALUES (UUID(), 'Foundation Group', NOW());`
|
|
||||||
|
|
||||||
- Get the group ID for the group you just created:
|
|
||||||
|
|
||||||
`SELECT id from refstack.group WHERE name = 'Foundation Group';`
|
|
||||||
|
|
||||||
- Get your OpenID:
|
|
||||||
|
|
||||||
`SELECT openid from refstack.user WHERE email = '<your email>';`
|
|
||||||
|
|
||||||
- Add your user account to the previously created "Foundation" group. Replace
|
|
||||||
`<Group ID>` and `<Your OpenID>` with the values retrieved in the two previous steps:
|
|
||||||
|
|
||||||
`INSERT INTO refstack.user_to_group (created_by_user, user_openid, group_id, created_at)
|
|
||||||
VALUES ('<Your OpenID>', '<Your OpenID>', '<Group ID>', NOW());`
|
|
||||||
|
|
||||||
- Create the actual "Foundation" organization using this group:
|
|
||||||
|
|
||||||
`INSERT INTO refstack.organization (id, type, name, group_id, created_by_user, created_at)
|
|
||||||
VALUES (UUID(), 0, 'Foundation', '<Group ID>', '<Your OpenID>', NOW());`
|
|
@ -1,56 +0,0 @@
|
|||||||
Run-in-docker manual
|
|
||||||
===================
|
|
||||||
|
|
||||||
The main purpose of the `run-in-docker` script is to provide a convenient way
|
|
||||||
to create a local setup of RefStack inside a Docker container. It should be
|
|
||||||
helpful for new developers and also for testing new features.
|
|
||||||
|
|
||||||
####Requirements:
|
|
||||||
- `Docker >= 1.6` (How to update on [Ubuntu](http://www.ubuntuupdates.org/ppa/docker))
|
|
||||||
|
|
||||||
####How to use:
|
|
||||||
Just run the `run-in-docker` script, but is important to first set env[REFSTACK_HOST]
|
|
||||||
with the public host/IP for your local API. If you want to test RefStack with OpenStackid
|
|
||||||
you should point a valid local alias here. For example:
|
|
||||||
|
|
||||||
`export REFSTACK_HOST=myrefstack.com`
|
|
||||||
|
|
||||||
By default 127.0.0.1 is used.
|
|
||||||
|
|
||||||
After it completes, check that the site is running on https://127.0.0.1.
|
|
||||||
|
|
||||||
The script will build a RefStack docker image with all dependencies, and will run
|
|
||||||
a container from this image. By default, RefStack will run inside this container.
|
|
||||||
You also can run `run-in-docker bash` to get access into the container. If you stop
|
|
||||||
the RefStack server by pressing 'Ctrl-C', the container is kept alive and will be
|
|
||||||
re-used next time.
|
|
||||||
|
|
||||||
You can customize the RefStack API config by editing `docker/templates/refstack.conf.tmpl`.
|
|
||||||
It is a bash template, so you can use ${SOME\_ENV\_VARIABLE} in it.
|
|
||||||
|
|
||||||
This script can make the reviewing process much easier because it creates separate
|
|
||||||
containers for each review. Containers get names in the form refstack_{REVIEW-TOPIC}.
|
|
||||||
Database schema changes are automatically handled, too, where the script creates a data
|
|
||||||
container for each database revision (refstack\_data\_{DATA-BASE-REVISON}) and reuses it
|
|
||||||
where possible. For example, if a new review uses an existing database revision, that
|
|
||||||
database container will be used.
|
|
||||||
|
|
||||||
####Available script options:
|
|
||||||
- `-r` Force delete the RefStack container and run it again.
|
|
||||||
This will update the RefStack config from template noted above.
|
|
||||||
- `-i` Run a container with isolated MySQL data. By default MySQL data is stored in
|
|
||||||
a refstack\_data\_{DATA-BASE-REVISON} container. It reuses this container if such
|
|
||||||
one exists. If you want to drop the DB data, just execute
|
|
||||||
`sudo docker rm refstack_data_{DATA-BASE-REVISON}`.
|
|
||||||
- `-b` Force delete RefStack image and build it again. This rebuids the Python and JS
|
|
||||||
environment for RefStack.
|
|
||||||
- `-d` Turn on debug information.
|
|
||||||
- `-h` Print usage message.
|
|
||||||
|
|
||||||
####Useful in-container commands/aliases:
|
|
||||||
- `api-up` - sync project and run the RefStack API
|
|
||||||
- `api-init-db` - initialize the RefStack database
|
|
||||||
- `api-db-version` - get current migration version of the RefStack database
|
|
||||||
- `api-sync` - sync project files in the container with the project files on the host
|
|
||||||
- `activate` - activate the python virtual env
|
|
||||||
- `mysql` - open the MySQL console
|
|
1
doc/source/README.rst
Symbolic link
1
doc/source/README.rst
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../README.rst
|
327
doc/source/conf.py
Normal file
327
doc/source/conf.py
Normal file
@ -0,0 +1,327 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Refstack documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Fri Aug 5 01:41:59 2016.
|
||||||
|
#
|
||||||
|
# This file is execfile()d with the current directory set to its
|
||||||
|
# containing dir.
|
||||||
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
#needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = []
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
#templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix of source filenames.
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The encoding of source files.
|
||||||
|
#source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = u'Refstack'
|
||||||
|
copyright = u'2016, OpenStack Foundation'
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
version = '1.0'
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
release = '1.0'
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#language = None
|
||||||
|
|
||||||
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
# non-false value, then it is used:
|
||||||
|
#today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
#today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
exclude_patterns = ['specs/prior/*', 'specs/README.rst', 'specs/template.rst']
|
||||||
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
|
# documents.
|
||||||
|
#default_role = None
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
#add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
#add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
#show_authors = False
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
# A list of ignored prefixes for module index sorting.
|
||||||
|
#modindex_common_prefix = []
|
||||||
|
|
||||||
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||||
|
#keep_warnings = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
html_theme = 'default'
|
||||||
|
|
||||||
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
# further. For a list of options available for each theme, see the
|
||||||
|
# documentation.
|
||||||
|
#html_theme_options = {}
|
||||||
|
|
||||||
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
|
#html_theme_path = []
|
||||||
|
|
||||||
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
|
# "<project> v<release> documentation".
|
||||||
|
#html_title = None
|
||||||
|
|
||||||
|
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||||
|
#html_short_title = None
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top
|
||||||
|
# of the sidebar.
|
||||||
|
#html_logo = None
|
||||||
|
|
||||||
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
|
# pixels large.
|
||||||
|
#html_favicon = None
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
#html_static_path = ['_static']
|
||||||
|
|
||||||
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
# directly to the root of the documentation.
|
||||||
|
#html_extra_path = []
|
||||||
|
|
||||||
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
|
# using the given strftime format.
|
||||||
|
#html_last_updated_fmt = '%b %d, %Y'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
#html_use_smartypants = True
|
||||||
|
|
||||||
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
#html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
#html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#html_domain_indices = True
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
#html_use_index = True
|
||||||
|
|
||||||
|
# If true, the index is split into individual pages for each letter.
|
||||||
|
#html_split_index = False
|
||||||
|
|
||||||
|
# If true, links to the reST sources are added to the pages.
|
||||||
|
#html_show_sourcelink = True
|
||||||
|
|
||||||
|
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_sphinx = True
|
||||||
|
|
||||||
|
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_copyright = True
|
||||||
|
|
||||||
|
# If true, an OpenSearch description file will be output, and all pages will
|
||||||
|
# contain a <link> tag referring to it. The value of this option must be the
|
||||||
|
# base URL from which the finished HTML is served.
|
||||||
|
#html_use_opensearch = ''
|
||||||
|
|
||||||
|
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||||
|
#html_file_suffix = None
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'Refstackdoc'
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
#'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#'preamble': '',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
('index', 'Refstack.tex', u'Refstack Documentation',
|
||||||
|
u'OpenStack Foundation', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
# the title page.
|
||||||
|
#latex_logo = None
|
||||||
|
|
||||||
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
|
# not chapters.
|
||||||
|
#latex_use_parts = False
|
||||||
|
|
||||||
|
# If true, show page references after internal links.
|
||||||
|
#latex_show_pagerefs = False
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#latex_show_urls = False
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#latex_domain_indices = True
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
('index', 'refstack', u'Refstack Documentation',
|
||||||
|
[u'OpenStack Foundation'], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#man_show_urls = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
('index', 'Refstack', u'Refstack Documentation',
|
||||||
|
u'OpenStack Foundation', 'Refstack', 'Toolset for testing interoperability'
|
||||||
|
' between OpenStack clouds.', 'Miscellaneous'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#texinfo_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#texinfo_domain_indices = True
|
||||||
|
|
||||||
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
|
#texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
|
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||||
|
#texinfo_no_detailmenu = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Epub output ----------------------------------------------
|
||||||
|
|
||||||
|
# Bibliographic Dublin Core info.
|
||||||
|
epub_title = u'Refstack'
|
||||||
|
epub_publisher = u'OpenStack Foundation'
|
||||||
|
epub_copyright = u'2016, OpenStack Foundation'
|
||||||
|
|
||||||
|
# The basename for the epub file. It defaults to the project name.
|
||||||
|
#epub_basename = u'Refstack'
|
||||||
|
|
||||||
|
# The HTML theme for the epub output. Since the default themes are not optimized
|
||||||
|
# for small screen space, using the same theme for HTML and epub output is
|
||||||
|
# usually not wise. This defaults to 'epub', a theme designed to save visual
|
||||||
|
# space.
|
||||||
|
#epub_theme = 'epub'
|
||||||
|
|
||||||
|
# The language of the text. It defaults to the language option
|
||||||
|
# or en if the language is not set.
|
||||||
|
#epub_language = ''
|
||||||
|
|
||||||
|
# The scheme of the identifier. Typical schemes are ISBN or URL.
|
||||||
|
#epub_scheme = ''
|
||||||
|
|
||||||
|
# The unique identifier of the text. This can be a ISBN number
|
||||||
|
# or the project homepage.
|
||||||
|
#epub_identifier = ''
|
||||||
|
|
||||||
|
# A unique identification for the text.
|
||||||
|
#epub_uid = ''
|
||||||
|
|
||||||
|
# A tuple containing the cover image and cover page html template filenames.
|
||||||
|
#epub_cover = ()
|
||||||
|
|
||||||
|
# A sequence of (type, uri, title) tuples for the guide element of content.opf.
|
||||||
|
#epub_guide = ()
|
||||||
|
|
||||||
|
# HTML files that should be inserted before the pages created by sphinx.
|
||||||
|
# The format is a list of tuples containing the path and title.
|
||||||
|
#epub_pre_files = []
|
||||||
|
|
||||||
|
# HTML files shat should be inserted after the pages created by sphinx.
|
||||||
|
# The format is a list of tuples containing the path and title.
|
||||||
|
#epub_post_files = []
|
||||||
|
|
||||||
|
# A list of files that should not be packed into the epub file.
|
||||||
|
epub_exclude_files = ['search.html']
|
||||||
|
|
||||||
|
# The depth of the table of contents in toc.ncx.
|
||||||
|
#epub_tocdepth = 3
|
||||||
|
|
||||||
|
# Allow duplicate toc entries.
|
||||||
|
#epub_tocdup = True
|
||||||
|
|
||||||
|
# Choose between 'default' and 'includehidden'.
|
||||||
|
#epub_tocscope = 'default'
|
||||||
|
|
||||||
|
# Fix unsupported image types using the PIL.
|
||||||
|
#epub_fix_images = False
|
||||||
|
|
||||||
|
# Scale large images.
|
||||||
|
#epub_max_image_width = 0
|
||||||
|
|
||||||
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
|
#epub_show_urls = 'inline'
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
#epub_use_index = True
|
46
doc/source/index.rst
Normal file
46
doc/source/index.rst
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
.. Refstack documentation master file, created by
|
||||||
|
sphinx-quickstart on Fri Aug 5 01:41:59 2016.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
====================================
|
||||||
|
Welcome to RefStack's documentation!
|
||||||
|
====================================
|
||||||
|
|
||||||
|
--------
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
README
|
||||||
|
refstack
|
||||||
|
run_in_docker
|
||||||
|
uploading_private_results
|
||||||
|
|
||||||
|
-----
|
||||||
|
Specs
|
||||||
|
-----
|
||||||
|
|
||||||
|
**Implemented in the Newton Cycle**
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
specs/newton/implemented/*
|
||||||
|
|
||||||
|
**Implemented in the Mitaka Cycle**
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
specs/mitaka/implemented/*
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`search`
|
||||||
|
|
249
doc/source/refstack.rst
Normal file
249
doc/source/refstack.rst
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
RefStack Quickstart
|
||||||
|
===================
|
||||||
|
|
||||||
|
You can use docker for `one-click setup <run_in_docker.rst>`__ or follow
|
||||||
|
step-by-step instructions below.
|
||||||
|
|
||||||
|
Install API dependencies (on ubuntu 14.x)..
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``sudo apt-get install git python-dev libssl-dev python-setuptools``
|
||||||
|
|
||||||
|
- ``sudo apt-get install mysql-server python-mysqldb``
|
||||||
|
|
||||||
|
- ``sudo easy_install -U pip``
|
||||||
|
|
||||||
|
- ``sudo easy_install -U virtualenv``
|
||||||
|
|
||||||
|
Install RefStack UI dependencies
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``curl -sL https://deb.nodesource.com/setup | sudo bash -``
|
||||||
|
|
||||||
|
- ``sudo apt-get install nodejs``
|
||||||
|
|
||||||
|
Setup the RefStack database
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- Log into MySQL: ``mysql -u root -p``
|
||||||
|
|
||||||
|
- After authentication, create the database:
|
||||||
|
|
||||||
|
``CREATE DATABASE refstack;``
|
||||||
|
|
||||||
|
- Create a refstack user:
|
||||||
|
|
||||||
|
``CREATE USER 'refstack'@'localhost' IDENTIFIED BY '<your password>';``
|
||||||
|
|
||||||
|
or using hash value for your password
|
||||||
|
|
||||||
|
``CREATE USER 'refstack'@'localhost' IDENTIFIED BY PASSWORD '<hash value of your password';``
|
||||||
|
|
||||||
|
- Grant privileges:
|
||||||
|
|
||||||
|
``GRANT ALL PRIVILEGES ON refstack . * TO 'refstack'@'localhost';``
|
||||||
|
|
||||||
|
- Reload privileges:
|
||||||
|
|
||||||
|
``FLUSH PRIVILEGES;``
|
||||||
|
|
||||||
|
- Exit MySQL: ``quit``
|
||||||
|
|
||||||
|
Git you clonin'
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``git clone http://github.com/openstack/refstack``
|
||||||
|
|
||||||
|
- ``cd refstack``
|
||||||
|
|
||||||
|
- Create virtual environment:
|
||||||
|
``virtualenv .venv --system-site-package``
|
||||||
|
|
||||||
|
- Source to virtual environment: ``source .venv/bin/activate``
|
||||||
|
|
||||||
|
Install RefStack application (on ubuntu 14.x)..
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``pip install .``
|
||||||
|
|
||||||
|
Install needed RefStack UI library dependencies
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``npm install``
|
||||||
|
|
||||||
|
API configuration file preparation
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- Make a copy of the sample config file (etc/refstack.conf.sample) and
|
||||||
|
update it with the correct information of your environment. Examples
|
||||||
|
of the config parameters with default values are included in the
|
||||||
|
sample config file.
|
||||||
|
|
||||||
|
- You should ensure that the following values in the config file are
|
||||||
|
noted and properly set:
|
||||||
|
|
||||||
|
- ``connection`` field in the ``[database]``\ section.
|
||||||
|
|
||||||
|
For example, if the backend database is MySQL then update:
|
||||||
|
``#connection = <None>`` to
|
||||||
|
``connection = mysql+pymysql://refstack:<your password>@x.x.x.x/refstack``
|
||||||
|
|
||||||
|
- ``ui_url`` field in the ``[DEFAULT]`` section.
|
||||||
|
|
||||||
|
This should be the URL that the UI can be accessed from. This will
|
||||||
|
likely be in the form ``http://<your server IP>:8000`` (8000 being
|
||||||
|
the default port RefStack is hosted on). For example:
|
||||||
|
``http://192.168.56.101:8000``
|
||||||
|
|
||||||
|
- ``api_url`` field in the ``[api]`` section.
|
||||||
|
|
||||||
|
This should be the URL that the API can be accessed from. This, in
|
||||||
|
most cases, will be the same as the value for ``ui_url`` above.
|
||||||
|
|
||||||
|
- ``app_dev_mode`` field in the ``[api]`` section.
|
||||||
|
|
||||||
|
Set this field to true if you aren't creating a production-level
|
||||||
|
RefStack deployment and are just trying things out or developing.
|
||||||
|
Setting this field to true will allow you to quickly bring up both
|
||||||
|
the API and UI together, with the UI files being served by a simple
|
||||||
|
file server that comes with Pecan.
|
||||||
|
|
||||||
|
Create UI config file
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
From the RefStack project root directory, create a config.json file and
|
||||||
|
specify your API endpoint inside this file. This will be something like
|
||||||
|
{"refstackApiUrl": "http://192.168.56.101:8000/v1"}:
|
||||||
|
|
||||||
|
- ``cp refstack-ui/app/config.json.sample refstack-ui/app/config.json``
|
||||||
|
|
||||||
|
Openstack OpenID endpoint configuration (optional)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
If you are only interested in the uploading and viewing of result sets,
|
||||||
|
then this section can be ignored. However, in order for user accounts
|
||||||
|
and authentication to work, you need to make sure you are properly
|
||||||
|
configured with an OpenStack OpenID endpoint. There are two options:
|
||||||
|
|
||||||
|
- Use the official endpoint
|
||||||
|
`openstackid.org <https://openstackid.org>`__
|
||||||
|
- Host your own openstackid endpoint
|
||||||
|
|
||||||
|
Since openstackid checks for valid top-level domains, in both options
|
||||||
|
you will likely have to edit the hosts file of the system where your
|
||||||
|
web-browser for viewing the RefStack site resides. On Linux systems, you
|
||||||
|
would modify ``/etc/hosts``, adding a line like the following:
|
||||||
|
|
||||||
|
``<RefStack server IP> <some valid domain name>``
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
``192.168.56.101 myrefstack.com``
|
||||||
|
|
||||||
|
On Windows, you would do the same in
|
||||||
|
``%SystemRoot%\System32\drivers\etc\hosts``. Alternatively, you can add
|
||||||
|
a custom DNS record with the domain name mapping if possible.
|
||||||
|
|
||||||
|
Note that doing this requires you to modify the config.json file and the
|
||||||
|
``api_url`` and ``ui_url`` fields in refstack.conf to use this domain
|
||||||
|
name instead of the IP.
|
||||||
|
|
||||||
|
**Option 1 - Use Official Endpoint**
|
||||||
|
|
||||||
|
Using the official site is probably the easiest option as no additional
|
||||||
|
configuration is needed besides the hosts file modifications as noted
|
||||||
|
above. RefStack, by default, points to this endpoint.
|
||||||
|
|
||||||
|
**Option 2 - Use Local Endpoint**
|
||||||
|
|
||||||
|
Instructions for setting this up are outside of the scope of this doc,
|
||||||
|
but you can get started at
|
||||||
|
[https://github.com/openstack-infra/openstackid]
|
||||||
|
(https://github.com/openstack-infra/openstackid) or
|
||||||
|
[https://github.com/fremontlabs/vagrant-openstackid]
|
||||||
|
(https://github.com/fremontlabs/vagrant-openstackid). You would then
|
||||||
|
need to modify the ``openstack_openid_endpoint`` field in the ``[osid]``
|
||||||
|
section in refstack.conf to match the local endpoint.
|
||||||
|
|
||||||
|
Database sync
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- Check current revision:
|
||||||
|
|
||||||
|
``refstack-manage --config-file /path/to/refstack.conf version``
|
||||||
|
|
||||||
|
The response will show the current database revision. If the revision is
|
||||||
|
``None`` (indicating a clear database), the following command should be
|
||||||
|
performed to upgrade the database to the latest revision:
|
||||||
|
|
||||||
|
- Upgrade database to latest revision:
|
||||||
|
|
||||||
|
``refstack-manage --config-file /path/to/refstack.conf upgrade --revision head``
|
||||||
|
|
||||||
|
- Check current revision:
|
||||||
|
|
||||||
|
``refstack-manage --config-file /path/to/refstack.conf version``
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Now it should be some revision number other than `None`.
|
||||||
|
|
||||||
|
Start RefStack
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
A simple way to start refstack is to just kick off gunicorn using the
|
||||||
|
``refstack-api`` executable:
|
||||||
|
|
||||||
|
- ``refstack-api --env REFSTACK_OSLO_CONFIG=/path/to/refstack.conf``
|
||||||
|
|
||||||
|
If ``app_dev_mode`` is set to true, this will launch both the UI and
|
||||||
|
API.
|
||||||
|
|
||||||
|
Now available:
|
||||||
|
|
||||||
|
- ``http://<your server IP>:8000/v1/results`` with response JSON
|
||||||
|
including records consisting of ``<test run id>`` and
|
||||||
|
``<upload date>`` of the test runs. The default response is limited
|
||||||
|
to one page of the most recent uploaded test run records. The number
|
||||||
|
of records per page is configurable via the RefStack configuration
|
||||||
|
file. Filtering parameters such as page, start\_date, and end\_date
|
||||||
|
can also be used to specify the desired records. For example: GET
|
||||||
|
``http://<your server IP>:8000/v1/results?page=n`` will return page
|
||||||
|
*n* of the data.
|
||||||
|
|
||||||
|
- ``http://<your server IP>:8000/v1/results/<test run id>`` with
|
||||||
|
response JSON including the detail test results of the specified
|
||||||
|
``<test run id>``
|
||||||
|
|
||||||
|
(Optional) Configure Foundation organization and group
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Overall RefStack admin access is given to users belonging to a
|
||||||
|
"Foundation" organization. To become a Foundation admin, first a
|
||||||
|
"Foundation" organization must be created. Note that you must have
|
||||||
|
logged into RefStack at least once so that a user record for your
|
||||||
|
account is created.
|
||||||
|
|
||||||
|
- Log into MySQL: ``mysql -u root -p``
|
||||||
|
|
||||||
|
- Create a group for the "Foundation" organization:
|
||||||
|
|
||||||
|
``INSERT INTO refstack.group (id, name, created_at) VALUES (UUID(), 'Foundation Group', NOW());``
|
||||||
|
|
||||||
|
- Get the group ID for the group you just created:
|
||||||
|
|
||||||
|
``SELECT id from refstack.group WHERE name = 'Foundation Group';``
|
||||||
|
|
||||||
|
- Get your OpenID:
|
||||||
|
|
||||||
|
``SELECT openid from refstack.user WHERE email = '<your email>';``
|
||||||
|
|
||||||
|
- Add your user account to the previously created "Foundation" group.
|
||||||
|
Replace ``<Group ID>`` and ``<Your OpenID>`` with the values
|
||||||
|
retrieved in the two previous steps:
|
||||||
|
|
||||||
|
``INSERT INTO refstack.user_to_group (created_by_user, user_openid, group_id, created_at) VALUES ('<Your OpenID>', '<Your OpenID>', '<Group ID>', NOW());``
|
||||||
|
|
||||||
|
- Create the actual "Foundation" organization using this group:
|
||||||
|
|
||||||
|
``INSERT INTO refstack.organization (id, type, name, group_id, created_by_user, created_at) VALUES (UUID(), 0, 'Foundation', '<Group ID>', '<Your OpenID>', NOW());``
|
73
doc/source/run_in_docker.rst
Normal file
73
doc/source/run_in_docker.rst
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
Run-in-docker manual
|
||||||
|
====================
|
||||||
|
|
||||||
|
The main purpose of the ``run-in-docker`` script is to provide a
|
||||||
|
convenient way to create a local setup of RefStack inside a Docker
|
||||||
|
container. It should be helpful for new developers and also for testing
|
||||||
|
new features.
|
||||||
|
|
||||||
|
Requirements:
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``Docker >= 1.6`` (How to update on
|
||||||
|
`Ubuntu <http://www.ubuntuupdates.org/ppa/docker>`__)
|
||||||
|
|
||||||
|
How to use:
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
Just run the ``run-in-docker`` script, but is important to first set
|
||||||
|
env[REFSTACK\_HOST] with the public host/IP for your local API. If you
|
||||||
|
want to test RefStack with OpenStackid you should point a valid local
|
||||||
|
alias here. For example:
|
||||||
|
|
||||||
|
``export REFSTACK_HOST=myrefstack.com``
|
||||||
|
|
||||||
|
By default 127.0.0.1 is used.
|
||||||
|
|
||||||
|
After it completes, check that the site is running on https://127.0.0.1.
|
||||||
|
|
||||||
|
The script will build a RefStack docker image with all dependencies, and
|
||||||
|
will run a container from this image. By default, RefStack will run
|
||||||
|
inside this container. You also can run ``run-in-docker bash`` to get
|
||||||
|
access into the container. If you stop the RefStack server by pressing
|
||||||
|
'Ctrl-C', the container is kept alive and will be re-used next time.
|
||||||
|
|
||||||
|
You can customize the RefStack API config by editing
|
||||||
|
``docker/templates/refstack.conf.tmpl``. It is a bash template, so you
|
||||||
|
can use ${SOME\_ENV\_VARIABLE} in it.
|
||||||
|
|
||||||
|
This script can make the reviewing process much easier because it
|
||||||
|
creates separate containers for each review. Containers get names in the
|
||||||
|
form refstack\_{REVIEW-TOPIC}. Database schema changes are automatically
|
||||||
|
handled, too, where the script creates a data container for each
|
||||||
|
database revision (refstack\_data\_{DATA-BASE-REVISON}) and reuses it
|
||||||
|
where possible. For example, if a new review uses an existing database
|
||||||
|
revision, that database container will be used.
|
||||||
|
|
||||||
|
Available script options:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``-r`` Force delete the RefStack container and run it again. This
|
||||||
|
will update the RefStack config from template noted above.
|
||||||
|
- ``-i`` Run a container with isolated MySQL data. By default MySQL
|
||||||
|
data is stored in a refstack\_data\_{DATA-BASE-REVISON} container. It
|
||||||
|
reuses this container if such one exists. If you want to drop the DB
|
||||||
|
data, just execute
|
||||||
|
``sudo docker rm refstack_data_{DATA-BASE-REVISON}``.
|
||||||
|
- ``-b`` Force delete RefStack image and build it again. This rebuids
|
||||||
|
the Python and JS environment for RefStack.
|
||||||
|
- ``-d`` Turn on debug information.
|
||||||
|
- ``-h`` Print usage message.
|
||||||
|
|
||||||
|
Useful in-container commands/aliases:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``api-up`` - sync project and run the RefStack API
|
||||||
|
- ``api-init-db`` - initialize the RefStack database
|
||||||
|
- ``api-db-version`` - get current migration version of the RefStack
|
||||||
|
database
|
||||||
|
- ``api-sync`` - sync project files in the container with the project
|
||||||
|
files on the host
|
||||||
|
- ``activate`` - activate the python virtual env
|
||||||
|
- ``mysql`` - open the MySQL console
|
||||||
|
|
1
doc/source/specs
Symbolic link
1
doc/source/specs
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../specs/
|
117
doc/source/uploading_private_results.rst
Normal file
117
doc/source/uploading_private_results.rst
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
How to upload test results to RefStack
|
||||||
|
======================================
|
||||||
|
|
||||||
|
RefStack allows test results contributors to submit test results and
|
||||||
|
have them displayed either anonymously, or identified with a vendor. As
|
||||||
|
such, test results should be uploaded with validated users. Users will
|
||||||
|
first log into RefStack with their OpenStack ID to upload their public
|
||||||
|
keys. RefStack test results can then be uploaded to RefStack using the
|
||||||
|
corresponding private key. By default, the uploaded data isn't shared,
|
||||||
|
but authorized users can decide to share the results with the community
|
||||||
|
anonymously.
|
||||||
|
|
||||||
|
The following is a quick guide outlining the steps needed to upload your
|
||||||
|
first set of test results.
|
||||||
|
|
||||||
|
Register an OpenStack ID
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
The RefStack server uses OpenStack OpenID for user authentication.
|
||||||
|
Therefore, the RefStack server requires that anyone who wants to upload
|
||||||
|
test data to have an OpenStack ID. As you click on the Sign In/Sign Up
|
||||||
|
link on the RefStack pages, you will be redirected to the official
|
||||||
|
OpenStack user log in page where you can either log in with your
|
||||||
|
OpenStack ID or register for one. The registration page can also be
|
||||||
|
found directly through: https://www.openstack.org/join/register.
|
||||||
|
|
||||||
|
Generate ssh keys locally
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
You will need to generate ssh keys locally. If your operating system is
|
||||||
|
a Linux distro, then you can use the following instructions.
|
||||||
|
|
||||||
|
First check for existing keys with command:
|
||||||
|
|
||||||
|
- ``ls -al ~/.ssh``
|
||||||
|
|
||||||
|
If you see you already have existing public and private keys that you
|
||||||
|
want to use, you can skip this step; otherwise:
|
||||||
|
|
||||||
|
- ``ssh-keygen -t rsa -b 4096 -C "youropenstackid"``
|
||||||
|
|
||||||
|
The 'youropenstackid' string is the username you chose when you
|
||||||
|
registered for your OpenStack ID account. Enter the file name in which
|
||||||
|
to save the key (/home/you/.ssh/id\_rsa), then press enter. You will be
|
||||||
|
asked to enter a passphrase. Just press enter again as passphrase
|
||||||
|
protected keys currently aren't supported. Your ssh keys will then be
|
||||||
|
generated.
|
||||||
|
|
||||||
|
Sign Key with RefStack Client
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
\*\* IMPORTANT \*\* You must have the RefStack client on you computer to
|
||||||
|
complete this step.
|
||||||
|
|
||||||
|
Generate a signature for your public key using your private key with
|
||||||
|
`refstack-client <https://github.com/openstack/refstack-client>`__
|
||||||
|
|
||||||
|
- ``./refstack-client sign /path-of-sshkey-folder/key-file-name``
|
||||||
|
|
||||||
|
The '/path-of-sshkey-folder' string is the path of the folder where the
|
||||||
|
generated ssh keys are stored locally. The 'key-file-name' portion
|
||||||
|
refers to the private key file name. If the command runs correctly,
|
||||||
|
there will be output like below:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Public key:
|
||||||
|
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSGo2xNDcII1ZaM3H2uKh3iXBzvKIOa5W/5HxKF23yrzwho7nR7td0kgFtZ/4fe0zmkkUuKdUhOACCD3QVyi1N5wIhKAYN1fGt0/305jk7VJ+yYhUPlvo...
|
||||||
|
|
||||||
|
Self signature:
|
||||||
|
19c28fc07e3fbe1085578bd6db2f1f75611dcd2ced068a2195bbca60ae98af7e27faa5b6968c3c5aef58b3fa91bae3df3...
|
||||||
|
|
||||||
|
Upload the ssh public key and the signature
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Sign into https://refstack.openstack.org with your OpenStack ID. Click
|
||||||
|
the "Profile" link in the upper right corner. Now click the "Import
|
||||||
|
public key" button on your profile page. A popup window with two entry
|
||||||
|
fields will appear. Just copy and paste the key and signature generated
|
||||||
|
in the previous step into the corresponding textboxes.
|
||||||
|
|
||||||
|
Note that the literal strings 'Public key:' and 'Self signature:' from
|
||||||
|
the refstack-client "sign" command output should not be copied/pasted
|
||||||
|
into the text boxes. Otherwise you will get an error like:
|
||||||
|
|
||||||
|
- ``Bad Request Request doesnt correspond to schema``
|
||||||
|
|
||||||
|
Once complete, click the 'Import public key' button.
|
||||||
|
|
||||||
|
Upload the test result with refstack-client
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
- ``./refstack-client upload /path_to_testresult_json_file --url https://refstack.openstack.org/api -i ~/.ssh/id_rsa``
|
||||||
|
|
||||||
|
\*\* NOTE \*\* Users may need to add the '--insecure' optional agrument
|
||||||
|
to the command string if certificate validation issues occur when
|
||||||
|
uploading test result. To use with insecure:
|
||||||
|
|
||||||
|
- ``./refstack-client upload --insecure /path_to_testresult_json_file --url https://refstack.openstack.org/api -i ~/.ssh/id_rsa``
|
||||||
|
|
||||||
|
- The ``path_to_testresult_json_file`` here is the json file of your test result.
|
||||||
|
|
||||||
|
- By default, it's in ``.tempest/.testrespository/<test-run-number>.json`` where refstack-client runs from.
|
||||||
|
|
||||||
|
- Here '' is a serial number that matches its corresponding subunit file name.
|
||||||
|
|
||||||
|
- If the command runs correctly, there will be output like below:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Test results will be uploaded to https://refstack.openstack.org/api. Ok? (yes/y): y
|
||||||
|
Test results uploaded!
|
||||||
|
URL: https://refstack.openstack.org/#/results/88a1e6f4-707d-4627-b658-b14b7e6ba70d.
|
||||||
|
|
||||||
|
You can find your uploaded test results by clicking the 'My Results'
|
||||||
|
link on the RefStack website.
|
||||||
|
|
@ -1,99 +0,0 @@
|
|||||||
How to upload test results to RefStack
|
|
||||||
======================================
|
|
||||||
|
|
||||||
RefStack allows test results contributors to submit test results and have them
|
|
||||||
displayed either anonymously, or identified with a vendor. As such, test
|
|
||||||
results should be uploaded with validated users. Users will first log into
|
|
||||||
RefStack with their OpenStack ID to upload their public keys. RefStack test
|
|
||||||
results can then be uploaded to RefStack using the corresponding private key.
|
|
||||||
By default, the uploaded data isn't shared, but authorized users can decide to
|
|
||||||
share the results with the community anonymously.
|
|
||||||
|
|
||||||
The following is a quick guide outlining the steps needed to upload your first
|
|
||||||
set of test results.
|
|
||||||
|
|
||||||
####Register an OpenStack ID
|
|
||||||
|
|
||||||
The RefStack server uses OpenStack OpenID for user authentication. Therefore,
|
|
||||||
the RefStack server requires that anyone who wants to upload test data to have
|
|
||||||
an OpenStack ID. As you click on the Sign In/Sign Up link on the RefStack
|
|
||||||
pages, you will be redirected to the official OpenStack user log in page where
|
|
||||||
you can either log in with your OpenStack ID or register for one. The
|
|
||||||
registration page can also be found directly through:
|
|
||||||
[https://www.openstack.org/join/register](https://www.openstack.org/join/register).
|
|
||||||
|
|
||||||
####Generate ssh keys locally
|
|
||||||
|
|
||||||
You will need to generate ssh keys locally. If your operating system is a Linux
|
|
||||||
distro, then you can use the following instructions.
|
|
||||||
|
|
||||||
First check for existing keys with command:
|
|
||||||
|
|
||||||
- `ls -al ~/.ssh`
|
|
||||||
|
|
||||||
If you see you already have existing public and private keys that you want to
|
|
||||||
use, you can skip this step; otherwise:
|
|
||||||
|
|
||||||
- `ssh-keygen -t rsa -b 4096 -C "youropenstackid"`
|
|
||||||
|
|
||||||
The 'youropenstackid' string is the username you chose when you registered for
|
|
||||||
your OpenStack ID account. Enter the file name in which to save the key
|
|
||||||
(/home/you/.ssh/id_rsa), then press enter. You will be asked to enter a
|
|
||||||
passphrase. Just press enter again as passphrase protected keys currently
|
|
||||||
aren't supported. Your ssh keys will then be generated.
|
|
||||||
|
|
||||||
####Sign Key with RefStack Client
|
|
||||||
|
|
||||||
** IMPORTANT ** You must have the RefStack client on you computer to complete
|
|
||||||
this step.
|
|
||||||
|
|
||||||
Generate a signature for your public key using your private key with
|
|
||||||
[refstack-client](https://github.com/openstack/refstack-client)
|
|
||||||
|
|
||||||
- `./refstack-client sign /path-of-sshkey-folder/key-file-name`
|
|
||||||
|
|
||||||
The '/path-of-sshkey-folder' string is the path of the folder where the
|
|
||||||
generated ssh keys are stored locally. The 'key-file-name' portion refers to
|
|
||||||
the private key file name. If the command runs correctly, there will be output
|
|
||||||
like below:
|
|
||||||
|
|
||||||
Public key:
|
|
||||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDSGo2xNDcII1ZaM3H2uKh3iXBzvKIOa5W/5HxKF23yrzwho7nR7td0kgFtZ/4fe0zmkkUuKdUhOACCD3QVyi1N5wIhKAYN1fGt0/305jk7VJ+yYhUPlvo...
|
|
||||||
|
|
||||||
Self signature:
|
|
||||||
19c28fc07e3fbe1085578bd6db2f1f75611dcd2ced068a2195bbca60ae98af7e27faa5b6968c3c5aef58b3fa91bae3df3...
|
|
||||||
|
|
||||||
####Upload the ssh public key and the signature
|
|
||||||
|
|
||||||
Sign into [https://refstack.openstack.org](https://refstack.openstack.org) with
|
|
||||||
your OpenStack ID. Click the "Profile" link in the upper right corner. Now
|
|
||||||
click the "Import public key" button on your profile page. A popup window with
|
|
||||||
two entry fields will appear. Just copy and paste the key and signature
|
|
||||||
generated in the previous step into the corresponding textboxes.
|
|
||||||
|
|
||||||
Note that the literal strings 'Public key:' and 'Self signature:' from the refstack-client "sign" command output should not be copied/pasted into the text boxes. Otherwise you will get an error like:
|
|
||||||
|
|
||||||
- `Bad Request Request doesnt correspond to schema`
|
|
||||||
|
|
||||||
Once complete, click the 'Import public key' button.
|
|
||||||
|
|
||||||
####Upload the test result with refstack-client
|
|
||||||
|
|
||||||
- `./refstack-client upload /path_to_testresult_json_file --url https://refstack.openstack.org/api -i ~/.ssh/id_rsa`
|
|
||||||
|
|
||||||
** NOTE ** Users may need to add the '--insecure' optional agrument to the command string if certificate validation issues occur when uploading test result. To use with insecure:
|
|
||||||
|
|
||||||
- `./refstack-client upload --insecure /path_to_testresult_json_file --url https://refstack.openstack.org/api -i ~/.ssh/id_rsa`
|
|
||||||
|
|
||||||
The `path_to_testresult_json_file` here is the json file of your test result.
|
|
||||||
By default, it's in `.tempest/.testrespository/<test-run-number>.json` where refstack-client runs from.
|
|
||||||
Here '<test-run-number>' is a serial number that matches its corresponding subunit file name.
|
|
||||||
|
|
||||||
If the command runs correctly, there will be output like below:
|
|
||||||
|
|
||||||
Test results will be uploaded to https://refstack.openstack.org/api. Ok? (yes/y): y
|
|
||||||
Test results uploaded!
|
|
||||||
URL: https://refstack.openstack.org/#/results/88a1e6f4-707d-4627-b658-b14b7e6ba70d.
|
|
||||||
|
|
||||||
You can find your uploaded test results by clicking the 'My Results' link on
|
|
||||||
the RefStack website.
|
|
@ -38,7 +38,7 @@
|
|||||||
data over time.</p>
|
data over time.</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li>install docs:
|
<li>install docs:
|
||||||
<a href="https://github.com/openstack/refstack/blob/master/doc/refstack.md">doc/refstack.md</a>
|
<a href="https://github.com/openstack/refstack/blob/master/doc/source/refstack.rst">doc/refstack.rst</a>
|
||||||
</li>
|
</li>
|
||||||
<li>repository:
|
<li>repository:
|
||||||
<a href="http://git.openstack.org/cgit/openstack/refstack">http://git.openstack.org/cgit/openstack/refstack</a>
|
<a href="http://git.openstack.org/cgit/openstack/refstack">http://git.openstack.org/cgit/openstack/refstack</a>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h4>Import Public Key</h4>
|
<h4>Import Public Key</h4>
|
||||||
<p>Instructions for adding a public key and signature can be found
|
<p>Instructions for adding a public key and signature can be found
|
||||||
<a href="https://github.com/openstack/refstack/blob/master/doc/uploading-private-results.md#generate-ssh-keys-locally"
|
<a href="https://github.com/openstack/refstack/blob/master/doc/source/uploading_private_results.rst#generate-ssh-keys-locally"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
title="How to generate and upload SSH key and signature with refstack-client">here.
|
title="How to generate and upload SSH key and signature with refstack-client">here.
|
||||||
</a>
|
</a>
|
||||||
|
@ -2,6 +2,7 @@ coverage>=3.6
|
|||||||
pep8==1.5.7
|
pep8==1.5.7
|
||||||
pyflakes==0.8.1
|
pyflakes==0.8.1
|
||||||
flake8==2.2.4
|
flake8==2.2.4
|
||||||
|
sphinx>=1.1.2,!=1.2.0,<1.3
|
||||||
httmock>=1.2.4
|
httmock>=1.2.4
|
||||||
mock
|
mock
|
||||||
oslotest>=1.2.0 # Apache-2.0
|
oslotest>=1.2.0 # Apache-2.0
|
||||||
|
Loading…
Reference in New Issue
Block a user