Add Placement API service

This is a separate REST API stack and data model used to track resource
provider inventories and usages, along with different classes of
resources.

SSL support for placement api will be added in separate CRs.

Change-Id: I8bec585dd5d9eb7f52c1cd50e1e3d44aba6bbe9d
This commit is contained in:
Sergey Reshetnyak 2017-03-02 15:07:07 +03:00
parent 3fff505014
commit 6271ff2f1a
6 changed files with 128 additions and 0 deletions

View File

@ -0,0 +1,12 @@
FROM {{ image_spec("nova-base") }}
MAINTAINER {{ maintainer }}
COPY daemon.sh /usr/local/bin/daemon.sh
RUN apt-get install -y --no-install-recommends \
apache2 \
libapache2-mod-wsgi \
&& apt-get clean \
&& chmod 755 /usr/local/bin/daemon.sh \
&& usermod -aG www-data nova \
&& echo > /etc/apache2/ports.conf

View File

@ -0,0 +1,4 @@
#!/bin/bash -ex
source /etc/apache2/envvars
/usr/sbin/apache2 -DNO_DETACH

View File

@ -0,0 +1,25 @@
Listen {{ placement.port.cont }}
<VirtualHost *:{{ placement.port.cont }}>
WSGIDaemonProcess placement-api processes={{ placement.wsgi.processes }} threads={{ placement.wsgi.threads }} user=nova display-name=%{GROUP} python-path=/var/lib/microservices/venv/lib/python2.7/site-packages
WSGIProcessGroup placement-api
WSGIScriptAlias / /var/lib/microservices/venv/bin/nova-placement-api
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%M"
</IfVersion>
<Directory /var/lib/microservices/venv/bin>
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
Alias /placement /var/lib/microservices/venv/bin/nova-placement-api
<Location /placement>
SetHandler wsgi-script
Options +ExecCGI
WSGIProcessGroup placement-api
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
</Location>

View File

@ -214,10 +214,24 @@ configs:
ram: 16384
disk: 160
vcpus: 8
placement:
enabled: true
port:
cont: 8780
ingress: placement
wsgi:
processes: 4
threads: 4
versions:
novnc_version: "0.6.1"
secret_configs:
placement:
account:
username: placement
password: password
sources:
openstack/nova:
git_url: https://git.openstack.org/openstack/nova.git

View File

@ -196,6 +196,20 @@ driver = {{ searchlight.notification_driver }}
notify_on_state_change = vm_and_task_state
{% endif %}
{% if placement.enabled %}
[placement]
auth_uri = {{ address("keystone", keystone.public_port, with_scheme=True) }}
auth_url = {{ address("keystone", keystone.admin_port, with_scheme=True) }}
auth_type = password
project_domain_name = {{ service_account.domain }}
user_domain_name = {{ service_account.domain }}
project_name = {{ service_account.project }}
username = {{ placement.account.username }}
password = {{ placement.account.password }}
memcached_servers = {{ address("memcached", memcached.port) }}
os_region_name = RegionOne
{% endif %}
{# messaging macros templates #}
{{ oslo_messaging[messaging.backend.notifications]('notifications_config') }}
{{ oslo_messaging[messaging.backend.rpc]('rpc_config') }}

View File

@ -0,0 +1,59 @@
dsl_version: 0.4.0
service:
name: placement-api
ports:
- {{ placement.port }}
annotations:
service:
prometheus.io/probe: "true"
containers:
- name: placement-api
image: placement-api
pre:
- name: placement-user-create
type: single
command: openstack user create --domain {{ service_account.domain }} --password {{ placement.account.password }} {{ placement.account.username }}
dependencies:
- keystone-create-domain
- name: placement-role-add
dependencies:
- keystone-create-project
- placement-user-create
type: single
command: openstack role add --project {{ service_account.project }} --user {{ placement.account.username }} admin
- name: placement-service-create
dependencies:
- keystone
type: single
command: openstack service create --name nova --description "Placement Service" placement
- name: placement-public-endpoint-create
dependencies:
- placement-service-create
type: single
command: openstack endpoint create --region RegionOne placement public {{ address('placement-api', placement.port, external=True, with_scheme=True) }}/placement
- name: placement-internal-endpoint-create
dependencies:
- placement-service-create
type: single
command: openstack endpoint create --region RegionOne placement internal {{ address('placement-api', placement.port, with_scheme=True) }}/placement
- name: placement-admin-endpoint-create
dependencies:
- placement-service-create
type: single
command: openstack endpoint create --region RegionOne placement admin {{ address('placement-api', placement.port, with_scheme=True) }}/placement
daemon:
command: daemon.sh
files:
- nova.conf
- apache-placement-api.conf
files:
nova.conf:
path: /etc/nova/nova.conf
content: nova.conf.j2
perm: "0644"
apache-placement-api.conf:
path: /etc/apache2/conf-enabled/nova-placement-api.conf
content: apache-placement-api.conf.j2
perm: "0600"