Merge "Add a doc describing a quick live environment"
This commit is contained in:
commit
f776e49022
@ -366,8 +366,10 @@ examples. Gabbi can provide a useful way of doing test driven development of a
|
|||||||
new handler: create a YAML file that describes the desired URLs and behavior
|
new handler: create a YAML file that describes the desired URLs and behavior
|
||||||
and write the code to make it pass.
|
and write the code to make it pass.
|
||||||
|
|
||||||
It is also possible to use gabbi against a running placement service, for
|
It's also possible to use gabbi against a running placement service, for
|
||||||
example in devstack. See `gabbi-run`_ to get started.
|
example in devstack. See `gabbi-run`_ to get started. If you don't want to
|
||||||
|
go to the trouble of using devstack, but do want a live server see
|
||||||
|
:doc:`quick-dev`.
|
||||||
|
|
||||||
Database Schema Changes
|
Database Schema Changes
|
||||||
=======================
|
=======================
|
||||||
|
196
doc/source/contributor/quick-dev.rst
Normal file
196
doc/source/contributor/quick-dev.rst
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
..
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
not use this file except in compliance with the License. You may obtain
|
||||||
|
a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
License for the specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
|
||||||
|
===========================
|
||||||
|
Quick Placement Development
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. note:: This is one of many ways to achieve a simple *live* development
|
||||||
|
enviroment for the placement service. This isn't meant to be the
|
||||||
|
best way, or the only way. Its purpose is more to demonstrate the
|
||||||
|
steps involved, so that people can learn from those steps and choose
|
||||||
|
to assemble them in whatever ways work best for them.
|
||||||
|
|
||||||
|
This content was originally written in a `blog post
|
||||||
|
<https://anticdent.org/quick-placement-development.html>`_, which
|
||||||
|
perhaps explains its folksy tone.
|
||||||
|
|
||||||
|
Here are some instructions on how to spin up the placement wsgi script with
|
||||||
|
uwsgi and a stubbed out ``placement.conf``, in case you want to see what
|
||||||
|
happens. The idea here is that you want to experiment with the current
|
||||||
|
placement code, using a live database, but you're not concerned with other
|
||||||
|
services, don't want to deal with devstack, but need a level of interaction
|
||||||
|
with the code and process that something like `placedock
|
||||||
|
<https://github.com/cdent/placedock>`_ can't provide.
|
||||||
|
|
||||||
|
*As ever, even all of the above has lots of assumptions about experience and
|
||||||
|
context. This document assumes you are someone who either is an OpenStack (and
|
||||||
|
probably placement) developer, or would like to be one.*
|
||||||
|
|
||||||
|
To make this go you need a unix-like OS, with a python3 dev environment, and
|
||||||
|
git and mysql (or postgresql) installed. We'll be doing this work from within a
|
||||||
|
virtualenv, built from the ``tox.ini`` in the placement code.
|
||||||
|
|
||||||
|
Get The Code
|
||||||
|
============
|
||||||
|
|
||||||
|
The placement code lives at
|
||||||
|
https://git.openstack.org/cgit/openstack/placement . We want to clone that::
|
||||||
|
|
||||||
|
git clone git://git.openstack.org/openstack/placement
|
||||||
|
cd placement
|
||||||
|
|
||||||
|
Setup The Database
|
||||||
|
==================
|
||||||
|
|
||||||
|
We need to 1) create the database, 2) create a virtualenv to have the command,
|
||||||
|
3) use it to create the tables.
|
||||||
|
|
||||||
|
The database can have whatever name you like. Whatever you choose, use it
|
||||||
|
throughout this process. We choose ``placement``. You may need a user and
|
||||||
|
password to talk to your database, setting that up is out of scope for this
|
||||||
|
document::
|
||||||
|
|
||||||
|
mysql -uroot -psecret -e "DROP DATABASE IF EXISTS placement;"
|
||||||
|
mysql -uroot -psecret -e "CREATE DATABASE placement CHARACTER SET utf8;"
|
||||||
|
|
||||||
|
You may also need to set permissions::
|
||||||
|
|
||||||
|
mysql -uroot -psecret \
|
||||||
|
-e "GRANT ALL PRIVILEGES ON placement.* TO 'root'@'%' identified by 'secret';"
|
||||||
|
|
||||||
|
Create a bare minimum placement.conf in the ``/etc/placement``
|
||||||
|
directory (which you may need to create)::
|
||||||
|
|
||||||
|
[placement_database]
|
||||||
|
connection = mysql+pymysql://root:secret@127.0.0.1/placement?charset=utf8
|
||||||
|
|
||||||
|
.. note:: You may choose the location of the configuration file on the command
|
||||||
|
line when using the ``placement-manage`` command.
|
||||||
|
|
||||||
|
Make the ``placement-manage`` command available by updating a virtualenv::
|
||||||
|
|
||||||
|
tox -epy36 --notest
|
||||||
|
|
||||||
|
Run the command to create the tables::
|
||||||
|
|
||||||
|
.tox/py36/bin/placement-manage db sync
|
||||||
|
|
||||||
|
You can confirm the tables are there with ``mysqlshow placement``
|
||||||
|
|
||||||
|
Run The Service
|
||||||
|
===============
|
||||||
|
|
||||||
|
Now we want to run the service. We need to update ``placement.conf`` so it will
|
||||||
|
produce debugging output and use the ``noauth`` strategy for authentication (so
|
||||||
|
we don't also have to run Keystone). Make ``placement.conf`` look like this
|
||||||
|
(adjusting for your database settings)::
|
||||||
|
|
||||||
|
[DEFAULT]
|
||||||
|
debug = True
|
||||||
|
|
||||||
|
[placement_database]
|
||||||
|
connection = mysql+pymysql://root:secret@127.0.0.1/placement?charset=utf8
|
||||||
|
|
||||||
|
[api]
|
||||||
|
auth_strategy = noauth2
|
||||||
|
|
||||||
|
We need to install the uwsgi package into the virtualenv::
|
||||||
|
|
||||||
|
.tox/py36/bin/pip install uwsgi
|
||||||
|
|
||||||
|
And then use uwsgi to run the service. Start it with::
|
||||||
|
|
||||||
|
.tox/py36/bin/uwsgi --http :8000 --wsgi-file .tox/py36/bin/placement-api --processes 2 --threads 10
|
||||||
|
|
||||||
|
.. note:: Adjust ``processes`` and ``threads`` as required. If you do not
|
||||||
|
provide these arguments the server will be a single process and
|
||||||
|
thus perform poorly.
|
||||||
|
|
||||||
|
If that worked you'll see lots of debug output and ``spawned uWSGI worker``.
|
||||||
|
Test that things are working from another terminal with curl::
|
||||||
|
|
||||||
|
curl -v http://localhost:8000/
|
||||||
|
|
||||||
|
Get a list of resource providers with (the ``x-auth-token`` header is
|
||||||
|
required, ``openstack-api-version`` is optional but makes sure we are getting
|
||||||
|
the latest functionality)::
|
||||||
|
|
||||||
|
curl -H 'x-auth-token: admin' \
|
||||||
|
-H 'openstack-api-version: placement latest' \
|
||||||
|
http://localhost:8000/resource_providers
|
||||||
|
|
||||||
|
The result ought to look something like this::
|
||||||
|
|
||||||
|
{"resource_providers": []}
|
||||||
|
|
||||||
|
If it doesn't then something went wrong with the above and there should be more
|
||||||
|
information in the terminal where ``uwsgi`` is running.
|
||||||
|
|
||||||
|
From here you can experiment with creating resource providers and related
|
||||||
|
placement features. If you change the placement code, ``ctrl-c`` to kill the
|
||||||
|
uwsgi process and start it up again. For testing, you might enjoy
|
||||||
|
`placecat <https://github.com/cdent/placecat>`_.
|
||||||
|
|
||||||
|
Here's all of the above as single script. As stated above this is for
|
||||||
|
illustrative purposes. You should make your own::
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
# Change these as required
|
||||||
|
CONF_DIR=/etc/placement
|
||||||
|
DB_DRIVER=mysql+pymysql # we assume mysql throughout, feel free to change
|
||||||
|
DB_NAME=placement
|
||||||
|
DB_USER=root
|
||||||
|
DB_PASS=secret
|
||||||
|
|
||||||
|
REPO=git://git.openstack.org/openstack/placement
|
||||||
|
|
||||||
|
# Create a directory for configuration to live.
|
||||||
|
[[ -d $CONF_DIR ]] || (sudo mkdir $CONF_DIR && sudo chown $USER $CONF_DIR)
|
||||||
|
|
||||||
|
# Establish database. Some of this may need sudo powers. Don't be shy
|
||||||
|
# about changing the script.
|
||||||
|
mysql -u$DB_USER -p$DB_PASS -e "DROP DATABASE IF EXISTS $DB_NAME;"
|
||||||
|
mysql -u$DB_USER -p$DB_PASS -e "CREATE DATABASE $DB_NAME CHARACTER SET utf8;"
|
||||||
|
mysql -u$DB_USER -p$DB_PASS -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';"
|
||||||
|
|
||||||
|
# clone the right code
|
||||||
|
git clone $REPO
|
||||||
|
cd placement
|
||||||
|
|
||||||
|
# establish virtenv
|
||||||
|
tox -epy36 --notest
|
||||||
|
|
||||||
|
# write placement.conf
|
||||||
|
cat<<EOF > $CONF_DIR/placement.conf
|
||||||
|
[DEFAULT]
|
||||||
|
debug = True
|
||||||
|
|
||||||
|
[placement_database]
|
||||||
|
connection = $DB_DRIVER://${DB_USER}:${DB_PASS}@127.0.0.1/${DB_NAME}?charset=utf8
|
||||||
|
|
||||||
|
[api]
|
||||||
|
auth_strategy = noauth2
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Create database tables
|
||||||
|
.tox/py36/bin/placement-manage db sync
|
||||||
|
|
||||||
|
# install uwsgi
|
||||||
|
.tox/py36/bin/pip install uwsgi
|
||||||
|
|
||||||
|
# run uwsgi
|
||||||
|
.tox/py36/bin/uwsgi --http :8000 --wsgi-file .tox/py36/bin/placement-api --processes 2 --threads 10
|
@ -247,6 +247,7 @@ This history of placement microversions may be found in
|
|||||||
configuration/index
|
configuration/index
|
||||||
contributor/index
|
contributor/index
|
||||||
contributor/api-ref-guideline
|
contributor/api-ref-guideline
|
||||||
|
contributor/quick-dev
|
||||||
install/controller-install-obs
|
install/controller-install-obs
|
||||||
install/controller-install-rdo
|
install/controller-install-rdo
|
||||||
install/controller-install-ubuntu
|
install/controller-install-ubuntu
|
||||||
|
Loading…
Reference in New Issue
Block a user