From e3a948aa3cf6302967444670c8d1f87706a77c8a Mon Sep 17 00:00:00 2001 From: Kristi Nikolla Date: Fri, 18 Nov 2016 11:26:03 -0500 Subject: [PATCH] Added documentation After migrating to the OpenStack infrastructure, the documentation was missing. This patch re-adds it. Closes-Bug: 1640285 Change-Id: I8f6f138b32483264d9ed8cdcc855b33f026097b6 --- doc/Makefile | 155 ++++++++++++++++++++++++++ doc/README.rst | 9 ++ doc/source/architecture.rst | 19 ++++ doc/source/conf.py | 10 +- doc/source/images/Notifications.png | Bin 0 -> 39208 bytes doc/source/images/SequenceDiagram.png | Bin 0 -> 34314 bytes doc/source/images/moc.png | Bin 0 -> 3707 bytes doc/source/index.rst | 2 +- doc/source/installation.rst | 108 +++++++++++++++++- doc/source/usage.rst | 7 -- 10 files changed, 293 insertions(+), 17 deletions(-) create mode 100644 doc/Makefile create mode 100644 doc/README.rst create mode 100644 doc/source/architecture.rst create mode 100644 doc/source/images/Notifications.png create mode 100644 doc/source/images/SequenceDiagram.png create mode 100644 doc/source/images/moc.png delete mode 100644 doc/source/usage.rst diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..48cec9e --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,155 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build +SOURCEDIR = source + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " autodoc generate the autodoc templates" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/mixmatch.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/mixmatch.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/mixmatch" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/mixmatch" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/doc/README.rst b/doc/README.rst new file mode 100644 index 0000000..a9537b9 --- /dev/null +++ b/doc/README.rst @@ -0,0 +1,9 @@ +Building Docs +============= + +Developer documentation is generated using Sphinx. To build this documentation, +run the following from the root of the repository:: + + $ tox -e docs + +The documentation will be built at ``doc/build/``. diff --git a/doc/source/architecture.rst b/doc/source/architecture.rst new file mode 100644 index 0000000..a82b95c --- /dev/null +++ b/doc/source/architecture.rst @@ -0,0 +1,19 @@ +============ +Architecture +============ + +The proxy is designed to substitute an endpoint in the service catalog. +When a user/service requests the proxied service for a specific resource +(volume, image, etc), the proxy will analyze the URL of the request to +figure out the type of the resource and the UUID of the resource and ' +forward the request to the correct service provider, getting a token through +K2K and using that for the remote endpoint. It will then forward the response +back. + +.. image:: images/SequenceDiagram.png + +To gather the information about the location of the resources, the proxy listens +to the notifications message bus for messages which describe the creation of new +resources, and stores that location information into the database. + +.. image:: images/Notifications.png diff --git a/doc/source/conf.py b/doc/source/conf.py index a87dce6..7d83713 100755 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -23,7 +23,7 @@ sys.path.insert(0, os.path.abspath('../..')) extensions = [ 'sphinx.ext.autodoc', #'sphinx.ext.intersphinx', - 'oslosphinx' + #'oslosphinx' ] # autodoc generation is a bit aggressive and a nuisance when doing heavy @@ -38,7 +38,8 @@ master_doc = 'index' # General information about the project. project = u'mixmatch' -copyright = u'2016, OpenStack Foundation' +copyright = u'2016, Massachusetts Open Cloud' +author = u'Massachusetts Open Cloud' # If true, '()' will be appended to :func: etc. cross-reference text. add_function_parentheses = True @@ -55,8 +56,9 @@ pygments_style = 'sphinx' # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. # html_theme_path = ["."] -# html_theme = '_theme' +html_theme = 'alabaster' # html_static_path = ['static'] +html_logo = 'images/moc.png' # Output file base name for HTML help builder. htmlhelp_basename = '%sdoc' % project @@ -68,7 +70,7 @@ latex_documents = [ ('index', '%s.tex' % project, u'%s Documentation' % project, - u'OpenStack Foundation', 'manual'), + u'Massachusetts Open Cloud', 'manual'), ] # Example configuration for intersphinx: refer to the Python standard library. diff --git a/doc/source/images/Notifications.png b/doc/source/images/Notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..85ec4a7584d7ff882f989c97ca198f781194fe74 GIT binary patch literal 39208 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 DVUyh$ literal 0 HcmV?d00001 diff --git a/doc/source/images/moc.png b/doc/source/images/moc.png new file mode 100644 index 0000000000000000000000000000000000000000..c00345f481837fa11ce44d0dea8f9d4892ff8bac GIT binary patch literal 3707 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 Z3;?Cn2PqM9oIU^m002ovPDHLkV1kVG2BQD~ literal 0 HcmV?d00001 diff --git a/doc/source/index.rst b/doc/source/index.rst index 295abd8..7014ab2 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -12,8 +12,8 @@ Contents: :maxdepth: 2 readme + architecture installation - usage contributing Indices and tables diff --git a/doc/source/installation.rst b/doc/source/installation.rst index 929b284..f2dd487 100644 --- a/doc/source/installation.rst +++ b/doc/source/installation.rst @@ -2,11 +2,109 @@ Installation ============ -At the command line:: +The proxy will be set up in one OpenStack installation, called the Identity +Provider, or IdP, and it redirect API calls to either the local services, or +remote services in one of several Service Provider installations (SP). - $ pip install mixmatch +Install dependencies. :: -Or, if you have virtualenvwrapper installed:: + $ pip install -r requirements.txt + $ python setup.py install + + +Web Server +========== +The recommended way is to run the proxy using uWSGI through the +``run_proxy.sh`` script. :: + + $ ./run_proxy.sh + + +It is also possible to run the proxy with Apache2 and ``mod_wsgi``, but there +are limitations compared to running it with uWSGI. + +- Image uploading with Glance doesn't work unless running Apache in embedded + mode. +- Image API v1 uses underscores in the header keys, which are silently dropped + by Apache. Hacking the configuration to allow these through is required. + +To run the proxy with Apache in Ubuntu: :: + + $ apt-get install libapache2-mod-wsgi + $ cp httpd/apache.conf /etc/apache2/sites-available/proxy.conf + $ cp etc/k2k-proxy.conf /etc/ + $ a2ensite proxy + $ service apache2 reload + + +Configuration +============= +The proxy searches for the configuration file ``k2k-proxy.conf`` in the +current directory, the ``etc/`` directory relative to the current directory or +``/etc/`` + +A sample configuration file has been provided in the ``etc`` folder of the +source code. + +The proxy will substitute the endpoint of the service it is proxying. +Only Cinder and Glance are supported for now. + +For each SP, you must have a section in ``k2k-proxy.conf`` which contains the +service provider name (as it is listed in Keystone's service catalog), and the +URI for connecting to the notification messagebus in that OpenStack +installation. For instance:: + + [sp_one] + sp_name="keystone-sp1" + messagebus="rabbit://rabbituser:rabbitpassword@192.168.7.20" + image_endpoint="http://192.168.7.20:9292" + volume_endpoint="http://192.168.7.20:8776" + +Keystone Configuration +---------------------- + +Keystone maintains the service catalog with information about all the +configured endpoints. + +In the IdP, delete and then recreate the endpoint which we will proxy. :: + + $ openstack endpoint delete + $ openstack endpoint create \ + --publicurl http://:// \ + --internalurl http://:// \ + --adminurl http://:// \ + --region RegionOne \ + + +Where service_type is ``image`` if endpoint_type is ``image`` +and ``volume`` if endpoint_type is ``volume`` or ``volumev2`` + +Nova Configuration +------------------ + +Nova reads the endpoint address for glance from the configuration file stored +in ``/etc/nova/nova.conf``. So, in the IdP, add the following:: + + # /etc/nova/nova.conf + [glance] + api_servers=/image + +Cinder Notification +------------------- + +Cinder reads the endpoint address for glance from the configuration file stored +in ``/etc/cinder/cinder.conf``. So, in the IdP, add the following:: + + # /etc/cinder/cinder.conf + [default] + glance_api_servers=/image + +Every Cinder must be configured to emit notifications on the messagebus. So, +in both the IdP and every SP, add the following to +``/etc/cinder/cinder.conf``:: + + # /etc/cinder/cinder.conf + [oslo_messaging_notifications] + driver = messaging + topics = notifications - $ mkvirtualenv mixmatch - $ pip install mixmatch diff --git a/doc/source/usage.rst b/doc/source/usage.rst deleted file mode 100644 index 330e5cd..0000000 --- a/doc/source/usage.rst +++ /dev/null @@ -1,7 +0,0 @@ -======== -Usage -======== - -To use mixmatch in a project:: - - import mixmatch