diff --git a/.gitignore b/.gitignore
index 293c3cab89a..e27f5c11492 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,12 +24,12 @@ instances
 keeper
 keys
 local_settings.py
-tools/conf/cinder.conf*
 tools/lintstack.head.py
 tools/pylint_exceptions
 tags
 # Files created by Sphinx build
 doc/build
+doc/source/_static/cinder.conf.sample
 
 # Files created by releasenotes build
 releasenotes/build
diff --git a/cinder/config/generate_cinder_opts.py b/cinder/config/generate_cinder_opts.py
index 763d6ec1b16..fba3cea01b3 100644
--- a/cinder/config/generate_cinder_opts.py
+++ b/cinder/config/generate_cinder_opts.py
@@ -16,8 +16,12 @@ import os
 import subprocess
 import textwrap
 
+BASEDIR = os.path.split(os.path.realpath(__file__))[0] + "/../../"
+
+
 if __name__ == "__main__":
-    opt_file = open("cinder/opts.py", 'a')
+    os.chdir(BASEDIR)
+    opt_file = open("cinder/opts.py", 'w')
     opt_dict = {}
     dir_trees_list = []
     REGISTER_OPTS_STR = "CONF.register_opts("
@@ -42,13 +46,12 @@ if __name__ == "__main__":
 
     opt_file.write("import itertools\n\n")
 
-    targetdir = os.environ['TARGETDIR']
-    basedir = os.environ['BASEDIRESC']
+    targetdir = 'cinder'
 
     common_string = ('find ' + targetdir + ' -type f -name "*.py" !  '
                      '-path "*/tests/*" -exec grep -l "%s" {} '
-                     '+  | sed -e "s/^' + basedir +
-                     '\///g" | sort -u')
+                     '+  | sed -e "s|^' + BASEDIR +
+                     '|/|g" | sort -u')
 
     cmd_opts = common_string % REGISTER_OPTS_STR
     output_opts = subprocess.check_output('{}'.format(cmd_opts), shell = True)
diff --git a/doc/source/_static/.placeholder b/doc/source/_static/.placeholder
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/doc/source/conf.py b/doc/source/conf.py
index a0fec022b05..f70900170d8 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -34,9 +34,13 @@ extensions = ['sphinx.ext.autodoc',
               'sphinx.ext.ifconfig',
               'sphinx.ext.graphviz',
               'oslosphinx',
-              'stevedore.sphinxext'
+              'stevedore.sphinxext',
+              'oslo_config.sphinxconfiggen',
               ]
 
+config_generator_config_file = '../../cinder/config/cinder-config-generator.conf'
+sample_config_basename = '_static/cinder'
+
 # autodoc generation is a bit aggressive and a nuisance
 # when doing heavy text edit cycles. Execute "export SPHINX_DEBUG=1"
 # in your terminal to disable
diff --git a/doc/source/devref/genconfig.rst b/doc/source/devref/genconfig.rst
deleted file mode 100644
index f7a055770b6..00000000000
--- a/doc/source/devref/genconfig.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-Generation of Sample Configuration Options
-==========================================
-
-opts.py
--------
-This file is dynamically created through the following commands and is used
-in the generation of the cinder.conf.sample file by the oslo config generator.
-It is kept in tree because deployers cannot run tox -e genconfig due to
-dependency issues. To generate this file only, use the command 'tox -e genopts'.
-To generate the cinder.conf.sample file use the command 'tox -e genconfig'.
-
-tox -e genconfig
-----------------
-This command will generate a new cinder.conf.sample file by running the
-cinder/tools/config/generate_sample.sh script.
-
-tox -e genopts
---------------
-This command dynamically generates the opts.py file only in the
-event that new configuration options have been added. To do this it
-runs the generate_sample.sh with the --nosamplefile option.
-
-check_uptodate.sh
------------------
-This script will check that the opts.py file exists and if it does, it
-will then create a temp opts.py file to verify that the current opts.py
-file is up to date with all new configuration options that may have been
-added. If it is not up to date it will suggest the generation of a new
-file using 'tox -e genopts'.
-
-generate_sample.sh
-------------------
-This script is responsible for calling the generate_cinder_opts.py file
-which dynamically generates the opts.py file by parsing through the entire
-cinder project.  All instances of CONF.register_opt() and CONF.register_opts()
-are collected and the needed arguments are pulled out of those methods. A
-list of the options being registered is created to be written to the opts.py file.
-Later, the oslo config generator takes in the opts.py file, parses through
-those lists and creates the sample file.
\ No newline at end of file
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 9044bedb05f..0fee7585e1d 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -52,6 +52,14 @@ API Extensions
 
 Go to http://api.openstack.org for information about Cinder API extensions.
 
+Sample Configuration File
+=========================
+
+.. toctree::
+    :maxdepth: 1
+
+    sample_config
+
 Outstanding Documentation Tasks
 ===============================
 
diff --git a/doc/source/sample_config.rst b/doc/source/sample_config.rst
new file mode 100644
index 00000000000..3c366492ac2
--- /dev/null
+++ b/doc/source/sample_config.rst
@@ -0,0 +1,13 @@
+============================
+Cinder Configuration Options
+============================
+
+The following is a sample Cinder configuration for adaptation and use. It is
+auto-generated from Cinder when this documentation is built, so if you are
+having issues with an option, please compare your version of Cinder with the
+version of this documentation.
+
+The sample configuration can also be viewed in
+`file form <_static/cinder.conf.sample>`_.
+
+.. literalinclude:: _static/cinder.conf.sample
diff --git a/tools/config/check_uptodate.sh b/tools/config/check_uptodate.sh
index 5de8909b192..77dcce064c3 100755
--- a/tools/config/check_uptodate.sh
+++ b/tools/config/check_uptodate.sh
@@ -1,57 +1,34 @@
 #!/usr/bin/env bash
 
-CHECKOPTS=0
-if [ "$1" == "--checkopts" ]; then
-    CHECKOPTS=1
-fi
-
-PROJECT_NAME=${PROJECT_NAME:-cinder}
-CFGFILE_NAME=${PROJECT_NAME}.conf.sample
-
-if [ $CHECKOPTS -eq 1 ]; then
-    if [ ! -e cinder/opts.py ]; then
+if [ ! -e cinder/opts.py ]; then
+    echo -en "\n\n#################################################"
+    echo -en "\nERROR: cinder/opts.py file is missing."
+    echo -en "\n#################################################\n"
+    exit 1
+else
+    mv cinder/opts.py cinder/opts.py.orig
+    tox -e genopts &> /dev/null
+    if [ $? -ne 0 ]; then
         echo -en "\n\n#################################################"
-        echo -en "\nERROR: cinder/opts.py file is missing."
-        echo -en "\n#################################################\n"
+        echo -en "\nERROR: Non-zero exit from generate_cinder_opts.py."
+        echo -en "\n       See output above for details.\n"
+        echo -en "#################################################\n"
+        mv cinder/opts.py.orig cinder/opts.py
         exit 1
     else
-        mv cinder/opts.py cinder/opts.py.orig
-        tox -e genopts &> /dev/null
+        diff cinder/opts.py.orig cinder/opts.py
         if [ $? -ne 0 ]; then
-            echo -en "\n\n#################################################"
-            echo -en "\nERROR: Non-zero exit from generate_cinder_opts.py."
-            echo -en "\n       See output above for details.\n"
-            echo -en "#################################################\n"
+            echo -en "\n\n########################################################"
+            echo -en "\nERROR: Configuration options change detected."
+            echo -en "\n       A new cinder/opts.py file must be generated."
+            echo -en "\n       Run 'tox -e genopts' from the base directory"
+            echo -en "\n       and add the result to your commit."
+            echo -en "\n########################################################\n\n"
+            rm cinder/opts.py
             mv cinder/opts.py.orig cinder/opts.py
             exit 1
         else
-            diff cinder/opts.py.orig cinder/opts.py
-            if [ $? -ne 0 ]; then
-                echo -en "\n\n########################################################"
-                echo -en "\nERROR: Configuration options change detected."
-                echo -en "\n       A new cinder/opts.py file must be generated."
-                echo -en "\n       Run 'tox -e genopts' from the base directory"
-                echo -en "\n       and add the result to your commit."
-                echo -en "\n########################################################\n\n"
-                rm cinder/opts.py
-                mv cinder/opts.py.orig cinder/opts.py
-                exit 1
-            else
-                rm cinder/opts.py.orig
-            fi
+            rm cinder/opts.py.orig
         fi
     fi
-else
-
-    tox -e genconfig &> /dev/null
-
-    if [ -e etc/${PROJECT_NAME}/${CFGFILE_NAME} ]; then
-        CFGFILE=etc/${PROJECT_NAME}/${CFGFILE_NAME}
-        rm -f $CFGFILE
-    else
-        echo -en "\n\n####################################################"
-        echo -en "\n${0##*/}: Can't find config file."
-        echo -en "\n####################################################\n\n"
-        exit 1
-    fi
 fi
diff --git a/tools/config/generate_sample.sh b/tools/config/generate_sample.sh
deleted file mode 100755
index e53a7be6ed2..00000000000
--- a/tools/config/generate_sample.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env bash
-
-# Generate sample configuration for your project.
-#
-# Aside from the command line flags, it also respects a config file which
-# should be named oslo.config.generator.rc and be placed in the same directory.
-#
-# You can then export the following variables:
-# CINDER_CONFIG_GENERATOR_EXTRA_MODULES: list of modules to interrogate for options.
-# CINDER_CONFIG_GENERATOR_EXTRA_LIBRARIES: list of libraries to discover.
-# CINDER_CONFIG_GENERATOR_EXCLUDED_FILES: list of files to remove from automatic listing.
-
-BASEDIR=${BASEDIR:-`pwd`}
-
-NOSAMPLE=0
-if [ ! -z ${2} ] ; then
-    if [ "${2}" == "--nosamplefile" ]; then
-        NOSAMPLE=1
-    fi
-fi
-
-print_error ()
-{
-    echo -en "\n\n##########################################################"
-    echo -en "\nERROR: ${0} was not called from tox."
-    echo -en "\n        Execute 'tox -e genconfig' for cinder.conf.sample"
-    echo -en "\n        generation."
-    echo -en "\n##########################################################\n\n"
-}
-
-if [ -z ${1} ] ; then
-    print_error
-    exit 1
-fi
-
-if [ ${1} != "from_tox" ] ; then
-    print_error
-    exit 1
-fi
-
-if ! [ -d $BASEDIR ] ; then
-    echo "${0##*/}: missing project base directory" >&2 ; exit 1
-elif [[ $BASEDIR != /* ]] ; then
-    BASEDIR=$(cd "$BASEDIR" && pwd)
-fi
-
-PACKAGENAME=${PACKAGENAME:-$(python setup.py --name)}
-TARGETDIR=$BASEDIR/$PACKAGENAME
-if ! [ -d $TARGETDIR ] ; then
-    echo "${0##*/}: invalid project package name" >&2 ; exit 1
-fi
-
-BASEDIRESC=`echo $BASEDIR | sed -e 's/\//\\\\\//g'`
-find $TARGETDIR -type f -name "*.pyc" -delete
-
-export TARGETDIR=$TARGETDIR
-export BASEDIRESC=$BASEDIRESC
-
-if [ -e $TARGETDIR/opts.py ] ; then
-    mv $TARGETDIR/opts.py $TARGETDIR/opts.py.bak
-fi
-
-python cinder/config/generate_cinder_opts.py
-
-if [ $? -ne 0 ] ; then
-    echo -en "\n\n#################################################"
-    echo -en "\nERROR: Non-zero exit from generate_cinder_opts.py."
-    echo -en "\n       See output above for details.\n"
-    echo -en "#################################################\n"
-    if [ -e $TARGETDIR/opts.py.bak ] ; then
-        mv $TARGETDIR/opts.py.bak $TARGETDIR/opts.py
-    fi
-    exit 1
-fi
-
-if [ $NOSAMPLE -eq 0 ] ; then
-    oslo-config-generator --config-file=cinder/config/cinder-config-generator.conf
-
-    if [ $? -ne 0 ] ; then
-        echo -en "\n\n#################################################"
-        echo -en "\nERROR: Non-zero exit from oslo-config-generator."
-        echo -en "\n       See output above for details.\n"
-        echo -en "#################################################\n"
-        mv $TARGETDIR/opts.py.bak $TARGETDIR/opts.py
-        exit 1
-    fi
-
-    diff $TARGETDIR/opts.py $TARGETDIR/opts.py.bak &> /dev/null
-
-    if [ $? -ne 0 ] ; then
-        mv $TARGETDIR/opts.py.bak $TARGETDIR/opts.py
-    else
-       rm -f $TARGETDIR/opts.py.bak
-    fi
-
-    if [ ! -s ./etc/cinder/cinder.conf.sample ] ; then
-        echo -en "\n\n#########################################################"
-        echo -en "\nERROR: etc/cinder/cinder.sample.conf not created properly."
-        echo -en "\n        See above output for details.\n"
-        echo -en "###########################################################\n"
-        exit 1
-    fi
-else
-    rm -f $TARGETDIR/opts.py.bak
-fi
diff --git a/tox.ini b/tox.ini
index 326a1a5f633..25673862892 100644
--- a/tox.ini
+++ b/tox.ini
@@ -41,7 +41,6 @@ commands =
   flake8 {posargs} .
   # Check that .po and .pot files are valid:
   bash -c "find cinder -type f -regex '.*\.pot?' -print0|xargs -0 -n 1 msgfmt --check-format -o /dev/null"
-  {toxinidir}/tools/config/check_uptodate.sh --checkopts
   {toxinidir}/tools/config/check_uptodate.sh
   {toxinidir}/tools/check_exec.py {toxinidir}/cinder
 
@@ -70,12 +69,12 @@ commands =
 [testenv:genconfig]
 sitepackages = False
 envdir = {toxworkdir}/pep8
-commands = {toxinidir}/tools/config/generate_sample.sh from_tox
+commands = oslo-config-generator --config-file=cinder/config/cinder-config-generator.conf
 
 [testenv:genopts]
 sitepackages = False
 envdir = {toxworkdir}/pep8
-commands = {toxinidir}/tools/config/generate_sample.sh from_tox --nosamplefile
+commands = python cinder/config/generate_cinder_opts.py
 
 [testenv:venv]
 # NOTE(jaegerandi): This target does not use constraints because