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
|
||||
========
|
||||
=========
|
||||
|
||||
**What is RefStack?**
|
||||
What is RefStack?
|
||||
#################
|
||||
|
||||
- Toolset for testing interoperability between OpenStack clouds.
|
||||
- Database backed website supporting collection and publication of
|
||||
Community Test results for OpenStack.
|
||||
- User interface to display individual test run results.
|
||||
|
||||
**Overview**
|
||||
|
||||
Overview
|
||||
##########
|
||||
|
||||
RefStack intends on being THE source of tools for interoperability testing
|
||||
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
|
||||
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
|
||||
* 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
|
||||
* reviews: https://review.openstack.org/#q,status:open+refstack-client,n,z
|
||||
|
||||
**Get involved!**
|
||||
Get involved!
|
||||
###############
|
||||
|
||||
* Mailing List: openstack-dev@lists.openstack.org
|
||||
* 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>
|
||||
<ul>
|
||||
<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>repository:
|
||||
<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">
|
||||
<h4>Import Public Key</h4>
|
||||
<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"
|
||||
title="How to generate and upload SSH key and signature with refstack-client">here.
|
||||
</a>
|
||||
|
@ -2,6 +2,7 @@ coverage>=3.6
|
||||
pep8==1.5.7
|
||||
pyflakes==0.8.1
|
||||
flake8==2.2.4
|
||||
sphinx>=1.1.2,!=1.2.0,<1.3
|
||||
httmock>=1.2.4
|
||||
mock
|
||||
oslotest>=1.2.0 # Apache-2.0
|
||||
|
Loading…
Reference in New Issue
Block a user