[install-guide] Remove heat and trove
These chapters are moved to the respective repositories, remove them here. Change-Id: I50505de3867562c536682cc91bd96c495c6a75df
This commit is contained in:
parent
db4c40d305
commit
80a919fe43
@ -98,7 +98,9 @@ exclude_patterns = ['common/cli*', 'common/nova*',
|
||||
'common/get_started_logical_architecture.rst',
|
||||
'common/get_started_dashboard.rst',
|
||||
'common/get_started_storage_concepts.rst',
|
||||
'common/get_started_database_service.rst',
|
||||
'common/get_started_data_processing.rst',
|
||||
'common/get_started_orchestration.rst',
|
||||
'common/dashboard_customizing.rst',
|
||||
'shared/note_configuration_vary_by_distribution.rst']
|
||||
|
||||
|
@ -1,44 +0,0 @@
|
||||
.. _heat-install:
|
||||
|
||||
Install and configure
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the
|
||||
Orchestration service, code-named heat, on the controller node.
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
#. Run the following commands to install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt-get install heat-api heat-api-cfn heat-engine python-heat-client
|
||||
|
||||
#. Respond to prompts for
|
||||
:doc:`database management <debconf/debconf-dbconfig-common>`,
|
||||
:doc:`Identity service credentials <debconf/debconf-keystone-authtoken>`,
|
||||
:doc:`service endpoint registration <debconf/debconf-api-endpoints>`,
|
||||
and :doc:`message broker credentials <debconf/debconf-rabbitmq>`.
|
||||
|
||||
#. Edit the ``/etc/heat/heat.conf`` file and complete the following
|
||||
actions:
|
||||
|
||||
* In the ``[ec2authtoken]`` section, configure Identity service access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[ec2authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000/v2.0
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
#. Restart the Orchestration services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# service heat-api restart
|
||||
# service heat-api-cfn restart
|
||||
# service heat-engine restart
|
@ -1 +0,0 @@
|
||||
../../install-guide/source/heat-next-steps.rst
|
@ -1 +0,0 @@
|
||||
../../install-guide/source/heat-verify.rst
|
@ -1 +0,0 @@
|
||||
../../install-guide/source/heat.rst
|
@ -46,9 +46,7 @@ Contents
|
||||
cinder.rst
|
||||
manila.rst
|
||||
swift.rst
|
||||
heat.rst
|
||||
ceilometer.rst
|
||||
trove.rst
|
||||
launch-instance.rst
|
||||
|
||||
Appendix
|
||||
|
@ -1,157 +0,0 @@
|
||||
.. _trove-install:
|
||||
|
||||
Install and configure
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the
|
||||
Database service, code-named trove, on the controller node.
|
||||
|
||||
This section assumes that you already have a working OpenStack
|
||||
environment with at least the following components installed:
|
||||
Compute, Image Service, Identity.
|
||||
|
||||
* If you want to do backup and restore, you also need Object Storage.
|
||||
|
||||
* If you want to provision datastores on block-storage volumes, you also
|
||||
need Block Storage.
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
.. include:: shared/note_configuration_vary_by_distribution.rst
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt-get update
|
||||
|
||||
# apt-get install python-trove python-troveclient \
|
||||
python-glanceclient trove-common trove-api trove-taskmanager \
|
||||
trove-conductor
|
||||
|
||||
#. In ``/etc/trove``, edit the following configuration files,
|
||||
taking the below actions for each file:
|
||||
|
||||
``trove.conf``
|
||||
|
||||
``trove-taskmanager.conf``
|
||||
|
||||
``trove-conductor.conf``
|
||||
|
||||
* Provide appropriate
|
||||
values for the following settings:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
log_dir = /var/log/trove
|
||||
trove_auth_url = http://controller:5000/v2.0
|
||||
nova_compute_url = http://controller:8774/v2
|
||||
cinder_url = http://controller:8776/v1
|
||||
swift_url = http://controller:8080/v1/AUTH_
|
||||
notifier_queue_hostname = controller
|
||||
...
|
||||
[database]
|
||||
connection = mysql://trove:TROVE_DBPASS@controller/trove
|
||||
|
||||
* Configure the Database module to use the ``RabbitMQ`` message broker
|
||||
by setting the following options in the ``[DEFAULT]`` configuration
|
||||
group of each file:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
rpc_backend = rabbit
|
||||
|
||||
[oslo_messaging_rabbit]
|
||||
...
|
||||
rabbit_host = controller
|
||||
rabbit_userid = openstack
|
||||
rabbit_password = RABBIT_PASS
|
||||
|
||||
#. Verify that the ``api-paste.ini``
|
||||
file is present in ``/etc/trove``.
|
||||
|
||||
If the file is not present, you can get it from this
|
||||
`location <http://git.openstack.org/cgit/openstack/trove/plain/etc/trove/api-paste.ini?h=stable/mitaka>`__.
|
||||
|
||||
#. Edit the ``trove.conf`` file so it includes appropriate values for the
|
||||
settings shown below:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
auth_strategy = keystone
|
||||
...
|
||||
# Config option for showing the IP address that nova doles out
|
||||
add_addresses = True
|
||||
network_label_regex = ^NETWORK_LABEL$
|
||||
...
|
||||
api_paste_config = /etc/trove/api-paste.ini
|
||||
...
|
||||
[keystone_authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000
|
||||
auth_url = http://controller:35357
|
||||
auth_type = password
|
||||
project_domain_name = default
|
||||
user_domain_name = default
|
||||
project_name = service
|
||||
username = trove
|
||||
password = TROVE_PASS
|
||||
|
||||
#. Edit the ``trove-taskmanager.conf`` file so it includes the required
|
||||
settings to connect to the OpenStack Compute service as shown below:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
# Configuration options for talking to nova via the novaclient.
|
||||
# These options are for an admin user in your keystone config.
|
||||
# It proxy's the token received from the user to send to nova
|
||||
# via this admin users creds,
|
||||
# basically acting like the client via that proxy token.
|
||||
nova_proxy_admin_user = admin
|
||||
nova_proxy_admin_pass = ADMIN_PASS
|
||||
nova_proxy_admin_tenant_name = service
|
||||
taskmanager_manager = trove.taskmanager.manager.Manager
|
||||
|
||||
#. In ``etc/trove``, edit the ``trove-guestagent.conf`` file
|
||||
so that future trove guests can connect to your OpenStack environment:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
rabbit_host = controller
|
||||
rabbit_password = RABBIT_PASS
|
||||
nova_proxy_admin_user = admin
|
||||
nova_proxy_admin_pass = ADMIN_PASS
|
||||
nova_proxy_admin_tenant_name = service
|
||||
trove_auth_url = http://controller:35357/v2.0
|
||||
|
||||
#. Populate the trove database you created earlier in this procedure:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "trove-manage db_sync" trove
|
||||
...
|
||||
2016-04-06 22:00:17.771 10706 INFO trove.db.sqlalchemy.migration [-]
|
||||
Upgrading mysql://trove:dbaasdb@controller/trove to version latest
|
||||
|
||||
.. note::
|
||||
|
||||
Ignore any deprecation messages in this output.
|
||||
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
#. Restart the Database services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# service trove-api restart
|
||||
# service trove-taskmanager restart
|
||||
# service trove-conductor restart
|
@ -1 +0,0 @@
|
||||
../../install-guide/source/trove-next-steps.rst
|
@ -1 +0,0 @@
|
||||
../../install-guide/source/trove-verify.rst
|
@ -1 +0,0 @@
|
||||
../../install-guide/source/trove.rst
|
@ -98,7 +98,9 @@ exclude_patterns = ['common/cli*', 'common/nova*',
|
||||
'common/get_started_logical_architecture.rst',
|
||||
'common/get_started_dashboard.rst',
|
||||
'common/get_started_storage_concepts.rst',
|
||||
'common/get_started_database_service.rst',
|
||||
'common/get_started_data_processing.rst',
|
||||
'common/get_started_orchestration.rst',
|
||||
'common/dashboard_customizing.rst',
|
||||
'shared/note_configuration_vary_by_distribution.rst']
|
||||
|
||||
|
@ -1,498 +0,0 @@
|
||||
.. _heat-install:
|
||||
|
||||
Install and configure
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the
|
||||
Orchestration service, code-named heat, on the controller node.
|
||||
|
||||
.. only:: obs or rdo or ubuntu
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
Before you install and configure Orchestration, you must create a
|
||||
database, service credentials, and API endpoints. Orchestration also
|
||||
requires additional information in the Identity service.
|
||||
|
||||
#. To create the database, complete these steps:
|
||||
|
||||
* Use the database access client to connect to the database
|
||||
server as the ``root`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ mysql -u root -p
|
||||
|
||||
* Create the ``heat`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
CREATE DATABASE heat;
|
||||
|
||||
* Grant proper access to the ``heat`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \
|
||||
IDENTIFIED BY 'HEAT_DBPASS';
|
||||
GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \
|
||||
IDENTIFIED BY 'HEAT_DBPASS';
|
||||
|
||||
Replace ``HEAT_DBPASS`` with a suitable password.
|
||||
|
||||
* Exit the database access client.
|
||||
|
||||
#. Source the ``admin`` credentials to gain access to
|
||||
admin-only CLI commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . admin-openrc
|
||||
|
||||
#. To create the service credentials, complete these steps:
|
||||
|
||||
* Create the ``heat`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack user create --domain default --password-prompt heat
|
||||
User Password:
|
||||
Repeat User Password:
|
||||
+-----------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------------------------+
|
||||
| domain_id | e0353a670a9e496da891347c589539e9 |
|
||||
| enabled | True |
|
||||
| id | ca2e175b851943349be29a328cc5e360 |
|
||||
| name | heat |
|
||||
+-----------+----------------------------------+
|
||||
|
||||
* Add the ``admin`` role to the ``heat`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role add --project service --user heat admin
|
||||
|
||||
.. note::
|
||||
|
||||
This command provides no output.
|
||||
|
||||
* Create the ``heat`` and ``heat-cfn`` service entities:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack service create --name heat \
|
||||
--description "Orchestration" orchestration
|
||||
+-------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | Orchestration |
|
||||
| enabled | True |
|
||||
| id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| name | heat |
|
||||
| type | orchestration |
|
||||
+-------------+----------------------------------+
|
||||
|
||||
$ openstack service create --name heat-cfn \
|
||||
--description "Orchestration" cloudformation
|
||||
+-------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | Orchestration |
|
||||
| enabled | True |
|
||||
| id | c42cede91a4e47c3b10c8aedc8d890c6 |
|
||||
| name | heat-cfn |
|
||||
| type | cloudformation |
|
||||
+-------------+----------------------------------+
|
||||
|
||||
#. Create the Orchestration service API endpoints:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
orchestration public http://controller:8004/v1/%\(tenant_id\)s
|
||||
+--------------+-----------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------+
|
||||
| enabled | True |
|
||||
| id | 3f4dab34624e4be7b000265f25049609 |
|
||||
| interface | public |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| service_name | heat |
|
||||
| service_type | orchestration |
|
||||
| url | http://controller:8004/v1/%(tenant_id)s |
|
||||
+--------------+-----------------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
orchestration internal http://controller:8004/v1/%\(tenant_id\)s
|
||||
+--------------+-----------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------+
|
||||
| enabled | True |
|
||||
| id | 9489f78e958e45cc85570fec7e836d98 |
|
||||
| interface | internal |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| service_name | heat |
|
||||
| service_type | orchestration |
|
||||
| url | http://controller:8004/v1/%(tenant_id)s |
|
||||
+--------------+-----------------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
orchestration admin http://controller:8004/v1/%\(tenant_id\)s
|
||||
+--------------+-----------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------+
|
||||
| enabled | True |
|
||||
| id | 76091559514b40c6b7b38dde790efe99 |
|
||||
| interface | admin |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| service_name | heat |
|
||||
| service_type | orchestration |
|
||||
| url | http://controller:8004/v1/%(tenant_id)s |
|
||||
+--------------+-----------------------------------------+
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
cloudformation public http://controller:8000/v1
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | b3ea082e019c4024842bf0a80555052c |
|
||||
| interface | public |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | c42cede91a4e47c3b10c8aedc8d890c6 |
|
||||
| service_name | heat-cfn |
|
||||
| service_type | cloudformation |
|
||||
| url | http://controller:8000/v1 |
|
||||
+--------------+----------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
cloudformation internal http://controller:8000/v1
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 169df4368cdc435b8b115a9cb084044e |
|
||||
| interface | internal |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | c42cede91a4e47c3b10c8aedc8d890c6 |
|
||||
| service_name | heat-cfn |
|
||||
| service_type | cloudformation |
|
||||
| url | http://controller:8000/v1 |
|
||||
+--------------+----------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
cloudformation admin http://controller:8000/v1
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 3d3edcd61eb343c1bbd629aa041ff88b |
|
||||
| interface | internal |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | c42cede91a4e47c3b10c8aedc8d890c6 |
|
||||
| service_name | heat-cfn |
|
||||
| service_type | cloudformation |
|
||||
| url | http://controller:8000/v1 |
|
||||
+--------------+----------------------------------+
|
||||
|
||||
#. Orchestration requires additional information in the Identity service to
|
||||
manage stacks. To add this information, complete these steps:
|
||||
|
||||
* Create the ``heat`` domain that contains projects and users
|
||||
for stacks:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack domain create --description "Stack projects and users" heat
|
||||
+-------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | Stack projects and users |
|
||||
| enabled | True |
|
||||
| id | 0f4d1bd326f2454dacc72157ba328a47 |
|
||||
| name | heat |
|
||||
+-------------+----------------------------------+
|
||||
|
||||
* Create the ``heat_domain_admin`` user to manage projects and users
|
||||
in the ``heat`` domain:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack user create --domain heat --password-prompt heat_domain_admin
|
||||
User Password:
|
||||
Repeat User Password:
|
||||
+-----------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------------------------+
|
||||
| domain_id | 0f4d1bd326f2454dacc72157ba328a47 |
|
||||
| enabled | True |
|
||||
| id | b7bd1abfbcf64478b47a0f13cd4d970a |
|
||||
| name | heat_domain_admin |
|
||||
+-----------+----------------------------------+
|
||||
|
||||
* Add the ``admin`` role to the ``heat_domain_admin`` user in the
|
||||
``heat`` domain to enable administrative stack management
|
||||
privileges by the ``heat_domain_admin`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role add --domain heat --user-domain heat --user heat_domain_admin admin
|
||||
|
||||
.. note::
|
||||
|
||||
This command provides no output.
|
||||
|
||||
* Create the ``heat_stack_owner`` role:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role create heat_stack_owner
|
||||
+-----------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------------------------+
|
||||
| domain_id | None |
|
||||
| id | 15e34f0c4fed4e68b3246275883c8630 |
|
||||
| name | heat_stack_owner |
|
||||
+-----------+----------------------------------+
|
||||
|
||||
* Add the ``heat_stack_owner`` role to the ``demo`` project and user to
|
||||
enable stack management by the ``demo`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role add --project demo --user demo heat_stack_owner
|
||||
|
||||
.. note::
|
||||
|
||||
This command provides no output.
|
||||
|
||||
.. note::
|
||||
|
||||
You must add the ``heat_stack_owner`` role to each user
|
||||
that manages stacks.
|
||||
|
||||
* Create the ``heat_stack_user`` role:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role create heat_stack_user
|
||||
+-----------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------------------------+
|
||||
| domain_id | None |
|
||||
| id | 88849d41a55d4d1d91e4f11bffd8fc5c |
|
||||
| name | heat_stack_user |
|
||||
+-----------+----------------------------------+
|
||||
|
||||
.. note::
|
||||
|
||||
The Orchestration service automatically assigns the
|
||||
``heat_stack_user`` role to users that it creates
|
||||
during stack deployment. By default, this role restricts
|
||||
:term:`API <Application Programming Interface (API)>` operations.
|
||||
To avoid conflicts, do not add
|
||||
this role to users with the ``heat_stack_owner`` role.
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
.. only:: obs or rdo or ubuntu
|
||||
|
||||
.. include:: shared/note_configuration_vary_by_distribution.rst
|
||||
|
||||
.. only:: obs
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# zypper install openstack-heat-api openstack-heat-api-cfn \
|
||||
openstack-heat-engine
|
||||
|
||||
.. only:: rdo
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# yum install openstack-heat-api openstack-heat-api-cfn \
|
||||
openstack-heat-engine
|
||||
|
||||
.. only:: ubuntu
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt-get install heat-api heat-api-cfn heat-engine
|
||||
|
||||
.. only:: obs or rdo or ubuntu
|
||||
|
||||
2. Edit the ``/etc/heat/heat.conf`` file and complete the following
|
||||
actions:
|
||||
|
||||
* In the ``[database]`` section, configure database access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[database]
|
||||
...
|
||||
connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat
|
||||
|
||||
Replace ``HEAT_DBPASS`` with the password you chose for the
|
||||
Orchestration database.
|
||||
|
||||
* In the ``[DEFAULT]`` and ``[oslo_messaging_rabbit]`` sections,
|
||||
configure ``RabbitMQ`` message queue access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
rpc_backend = rabbit
|
||||
|
||||
[oslo_messaging_rabbit]
|
||||
...
|
||||
rabbit_host = controller
|
||||
rabbit_userid = openstack
|
||||
rabbit_password = RABBIT_PASS
|
||||
|
||||
Replace ``RABBIT_PASS`` with the password you chose for the
|
||||
``openstack`` account in ``RabbitMQ``.
|
||||
|
||||
* In the ``[keystone_authtoken]``, ``[trustee]``,
|
||||
``[clients_keystone]``, and ``[ec2authtoken]`` sections,
|
||||
configure Identity service access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[keystone_authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000
|
||||
auth_url = http://controller:35357
|
||||
memcached_servers = controller:11211
|
||||
auth_type = password
|
||||
project_domain_name = default
|
||||
user_domain_name = default
|
||||
project_name = service
|
||||
username = heat
|
||||
password = HEAT_PASS
|
||||
|
||||
[trustee]
|
||||
...
|
||||
auth_plugin = password
|
||||
auth_url = http://controller:35357
|
||||
username = heat
|
||||
password = HEAT_PASS
|
||||
user_domain_name = default
|
||||
|
||||
[clients_keystone]
|
||||
...
|
||||
auth_uri = http://controller:35357
|
||||
|
||||
[ec2authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000/v3
|
||||
|
||||
Replace ``HEAT_PASS`` with the password you chose for the
|
||||
``heat`` user in the Identity service.
|
||||
|
||||
* In the ``[DEFAULT]`` section, configure the metadata and
|
||||
wait condition URLs:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
heat_metadata_server_url = http://controller:8000
|
||||
heat_waitcondition_server_url = http://controller:8000/v1/waitcondition
|
||||
|
||||
* In the ``[DEFAULT]`` section, configure the stack domain and
|
||||
administrative credentials:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
stack_domain_admin = heat_domain_admin
|
||||
stack_domain_admin_password = HEAT_DOMAIN_PASS
|
||||
stack_user_domain_name = heat
|
||||
|
||||
Replace ``HEAT_DOMAIN_PASS`` with the password you chose for the
|
||||
``heat_domain_admin`` user in the Identity service.
|
||||
|
||||
.. only:: rdo or ubuntu
|
||||
|
||||
3. Populate the Orchestration database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "heat-manage db_sync" heat
|
||||
|
||||
.. note::
|
||||
|
||||
Ignore any deprecation messages in this output.
|
||||
|
||||
.. only:: debian
|
||||
|
||||
#. Run the following commands to install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt-get install heat-api heat-api-cfn heat-engine python-heat-client
|
||||
|
||||
#. Respond to prompts for debconf.
|
||||
|
||||
.. :doc:`database management <debconf/debconf-dbconfig-common>`,
|
||||
:doc:`Identity service credentials <debconf/debconf-keystone-authtoken>`,
|
||||
:doc:`service endpoint registration <debconf/debconf-api-endpoints>`,
|
||||
and :doc:`message broker credentials <debconf/debconf-rabbitmq>`.
|
||||
|
||||
#. Edit the ``/etc/heat/heat.conf`` file and complete the following
|
||||
actions:
|
||||
|
||||
* In the ``[ec2authtoken]`` section, configure Identity service access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[ec2authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000/v2.0
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
.. only:: obs or rdo
|
||||
|
||||
* Start the Orchestration services and configure them to start
|
||||
when the system boots:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl enable openstack-heat-api.service \
|
||||
openstack-heat-api-cfn.service openstack-heat-engine.service
|
||||
# systemctl start openstack-heat-api.service \
|
||||
openstack-heat-api-cfn.service openstack-heat-engine.service
|
||||
|
||||
.. only:: ubuntu or debian
|
||||
|
||||
1. Restart the Orchestration services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# service heat-api restart
|
||||
# service heat-api-cfn restart
|
||||
# service heat-engine restart
|
@ -1,8 +0,0 @@
|
||||
.. _heat-next-steps:
|
||||
|
||||
Next steps
|
||||
~~~~~~~~~~
|
||||
|
||||
Your OpenStack environment now includes Orchestration. You can
|
||||
:ref:`launch-instance` or add more services to your environment
|
||||
in the following chapters.
|
@ -1,36 +0,0 @@
|
||||
.. _heat-verify:
|
||||
|
||||
Verify operation
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
Verify operation of the Orchestration service.
|
||||
|
||||
.. note::
|
||||
|
||||
Perform these commands on the controller node.
|
||||
|
||||
#. Source the ``admin`` tenant credentials:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . admin-openrc
|
||||
|
||||
#. List service components to verify successful launch and
|
||||
registration of each process:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack orchestration service list
|
||||
+------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+
|
||||
| hostname | binary | engine_id | host | topic | updated_at | status |
|
||||
+------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+
|
||||
| controller | heat-engine | 3e85d1ab-a543-41aa-aa97-378c381fb958 | controller | engine | 2015-10-13T14:16:06.000000 | up |
|
||||
| controller | heat-engine | 45dbdcf6-5660-4d5f-973a-c4fc819da678 | controller | engine | 2015-10-13T14:16:06.000000 | up |
|
||||
| controller | heat-engine | 51162b63-ecb8-4c6c-98c6-993af899c4f7 | controller | engine | 2015-10-13T14:16:06.000000 | up |
|
||||
| controller | heat-engine | 8d7edc6d-77a6-460d-bd2a-984d76954646 | controller | engine | 2015-10-13T14:16:06.000000 | up |
|
||||
+------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+
|
||||
|
||||
.. note::
|
||||
|
||||
This output should indicate four ``heat-engine`` components
|
||||
on the controller node.
|
@ -1,14 +0,0 @@
|
||||
=====================
|
||||
Orchestration service
|
||||
=====================
|
||||
|
||||
.. toctree::
|
||||
|
||||
common/get_started_orchestration.rst
|
||||
heat-install.rst
|
||||
heat-verify.rst
|
||||
heat-next-steps.rst
|
||||
|
||||
The Orchestration service (heat) uses a
|
||||
`Heat Orchestration Template (HOT) <http://docs.openstack.org/developer/heat/template_guide/hot_guide.html>`_
|
||||
to create and manage cloud resources.
|
@ -89,9 +89,7 @@ Contents
|
||||
cinder.rst
|
||||
manila.rst
|
||||
swift.rst
|
||||
heat.rst
|
||||
ceilometer.rst
|
||||
trove.rst
|
||||
launch-instance.rst
|
||||
|
||||
.. Pseudo only directive for each distribution used by the build tool.
|
||||
|
@ -1,367 +0,0 @@
|
||||
.. _trove-install:
|
||||
|
||||
Install and configure
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to install and configure the
|
||||
Database service, code-named trove, on the controller node.
|
||||
|
||||
This section assumes that you already have a working OpenStack
|
||||
environment with at least the following components installed:
|
||||
Compute, Image Service, Identity.
|
||||
|
||||
* If you want to do backup and restore, you also need Object Storage.
|
||||
|
||||
* If you want to provision datastores on block-storage volumes, you also
|
||||
need Block Storage.
|
||||
|
||||
|
||||
.. only:: obs or rdo or ubuntu
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
Before you install and configure the Database service, you must create a
|
||||
database, service credentials, and API endpoints.
|
||||
|
||||
#. To create the database, complete these steps:
|
||||
|
||||
* Use the database access client to connect to the database
|
||||
server as the ``root`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ mysql -u root -p
|
||||
|
||||
* Create the ``trove`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
CREATE DATABASE trove;
|
||||
|
||||
* Grant proper access to the ``trove`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'localhost' \
|
||||
IDENTIFIED BY 'TROVE_DBPASS';
|
||||
GRANT ALL PRIVILEGES ON trove.* TO 'trove'@'%' \
|
||||
IDENTIFIED BY 'TROVE_DBPASS';
|
||||
|
||||
Replace ``TROVE_DBPASS`` with a suitable password.
|
||||
|
||||
* Exit the database access client.
|
||||
|
||||
#. Source the ``admin`` credentials to gain access to
|
||||
admin-only CLI commands:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . admin-openrc
|
||||
|
||||
#. To create the service credentials, complete these steps:
|
||||
|
||||
* Create the ``trove`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack user create --domain default --password-prompt trove
|
||||
User Password:
|
||||
Repeat User Password:
|
||||
+-----------+-----------------------------------+
|
||||
| Field | Value |
|
||||
+-----------+-----------------------------------+
|
||||
| domain_id | default |
|
||||
| enabled | True |
|
||||
| id | ca2e175b851943349be29a328cc5e360 |
|
||||
| name | trove |
|
||||
+-----------+-----------------------------------+
|
||||
|
||||
* Add the ``admin`` role to the ``trove`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role add --project service --user trove admin
|
||||
|
||||
.. note::
|
||||
|
||||
This command provides no output.
|
||||
|
||||
* Create the ``trove`` service entity:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack service create --name trove \
|
||||
--description "Database" database
|
||||
+-------------+-----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+-----------------------------------+
|
||||
| description | Database |
|
||||
| enabled | True |
|
||||
| id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| name | trove |
|
||||
| type | database |
|
||||
+-------------+-----------------------------------+
|
||||
|
||||
|
||||
#. Create the Database service API endpoints:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
database public http://controller:8779/v1.0/%\(tenant_id\)s
|
||||
+--------------+----------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------------------+
|
||||
| enabled | True |
|
||||
| id | 3f4dab34624e4be7b000265f25049609 |
|
||||
| interface | public |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| service_name | trove |
|
||||
| service_type | database |
|
||||
| url | http://controller:8779/v1.0/%\(tenant_id\)s |
|
||||
+--------------+----------------------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
database internal http://controller:8779/v1.0/%\(tenant_id\)s
|
||||
+--------------+----------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------------------+
|
||||
| enabled | True |
|
||||
| id | 9489f78e958e45cc85570fec7e836d98 |
|
||||
| interface | internal |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| service_name | trove |
|
||||
| service_type | database |
|
||||
| url | http://controller:8779/v1.0/%\(tenant_id\)s |
|
||||
+--------------+----------------------------------------------+
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
database admin http://controller:8779/v1.0/%\(tenant_id\)s
|
||||
+--------------+----------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------------------+
|
||||
| enabled | True |
|
||||
| id | 76091559514b40c6b7b38dde790efe99 |
|
||||
| interface | admin |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 727841c6f5df4773baa4e8a5ae7d72eb |
|
||||
| service_name | trove |
|
||||
| service_type | database |
|
||||
| url | http://controller:8779/v1.0/%\(tenant_id\)s |
|
||||
+--------------+----------------------------------------------+
|
||||
|
||||
Install and configure components
|
||||
--------------------------------
|
||||
|
||||
.. only:: obs or rdo or ubuntu
|
||||
|
||||
.. include:: shared/note_configuration_vary_by_distribution.rst
|
||||
|
||||
.. only:: obs
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# zypper --quiet --non-interactive install python-oslo.db \
|
||||
python-MySQL-python
|
||||
|
||||
# zypper --quiet --non-interactive install openstack-trove-api \
|
||||
openstack-trove-taskmanager openstack-trove-conductor \
|
||||
openstack-trove-guestagent
|
||||
|
||||
.. only:: rdo
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# yum install openstack-trove python-troveclient
|
||||
|
||||
.. only:: ubuntu
|
||||
|
||||
#. Install the packages:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt-get update
|
||||
|
||||
# apt-get install python-trove python-troveclient \
|
||||
python-glanceclient trove-common trove-api trove-taskmanager \
|
||||
trove-conductor
|
||||
|
||||
.. only:: obs or rdo or ubuntu
|
||||
|
||||
2. In the ``/etc/trove`` directory, edit the ``trove.conf``,
|
||||
``trove-taskmanager.conf`` and ``trove-conductor.conf`` files and
|
||||
complete the following steps:
|
||||
|
||||
* Provide appropriate values for the following settings:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
log_dir = /var/log/trove
|
||||
trove_auth_url = http://controller:5000/v2.0
|
||||
nova_compute_url = http://controller:8774/v2
|
||||
cinder_url = http://controller:8776/v1
|
||||
swift_url = http://controller:8080/v1/AUTH_
|
||||
notifier_queue_hostname = controller
|
||||
...
|
||||
[database]
|
||||
connection = mysql://trove:TROVE_DBPASS@controller/trove
|
||||
|
||||
* Configure the Database service to use the ``RabbitMQ`` message broker
|
||||
by setting the following options in each file:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
rpc_backend = rabbit
|
||||
|
||||
[oslo_messaging_rabbit]
|
||||
...
|
||||
rabbit_host = controller
|
||||
rabbit_userid = openstack
|
||||
rabbit_password = RABBIT_PASS
|
||||
|
||||
3. Verify that the ``api-paste.ini`` file is present in ``/etc/trove``.
|
||||
|
||||
If the file is not present, you can get it from this
|
||||
`location <http://git.openstack.org/cgit/openstack/trove/plain/etc/trove/api-paste.ini?h=stable/mitaka>`__.
|
||||
|
||||
4. Edit the ``trove.conf`` file so it includes appropriate values for the
|
||||
settings shown below:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
auth_strategy = keystone
|
||||
...
|
||||
# Config option for showing the IP address that nova doles out
|
||||
add_addresses = True
|
||||
network_label_regex = ^NETWORK_LABEL$
|
||||
...
|
||||
api_paste_config = /etc/trove/api-paste.ini
|
||||
...
|
||||
[keystone_authtoken]
|
||||
...
|
||||
auth_uri = http://controller:5000
|
||||
auth_url = http://controller:35357
|
||||
auth_type = password
|
||||
project_domain_name = default
|
||||
user_domain_name = default
|
||||
project_name = service
|
||||
username = trove
|
||||
password = TROVE_PASS
|
||||
|
||||
5. Edit the ``trove-taskmanager.conf`` file so it includes the required
|
||||
settings to connect to the OpenStack Compute service as shown below:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
# Configuration options for talking to nova via the novaclient.
|
||||
# These options are for an admin user in your keystone config.
|
||||
# It proxy's the token received from the user to send to nova
|
||||
# via this admin users creds,
|
||||
# basically acting like the client via that proxy token.
|
||||
nova_proxy_admin_user = admin
|
||||
nova_proxy_admin_pass = ADMIN_PASS
|
||||
nova_proxy_admin_tenant_name = service
|
||||
taskmanager_manager = trove.taskmanager.manager.Manager
|
||||
|
||||
6. Edit the ``/etc/trove/trove-guestagent.conf`` file
|
||||
so that future trove guests can connect to your OpenStack environment:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
rabbit_host = controller
|
||||
rabbit_password = RABBIT_PASS
|
||||
nova_proxy_admin_user = admin
|
||||
nova_proxy_admin_pass = ADMIN_PASS
|
||||
nova_proxy_admin_tenant_name = service
|
||||
trove_auth_url = http://controller:35357/v2.0
|
||||
|
||||
7. Populate the trove database you created earlier in this procedure:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "trove-manage db_sync" trove
|
||||
...
|
||||
2016-04-06 22:00:17.771 10706 INFO trove.db.sqlalchemy.migration [-]
|
||||
Upgrading mysql://trove:dbaasdb@controller/trove to version latest
|
||||
|
||||
.. note::
|
||||
|
||||
Ignore any deprecation messages in this output.
|
||||
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
.. only:: ubuntu
|
||||
|
||||
1. Due to a bug in the Ubuntu packages, edit the service definition files
|
||||
to use the correct configuration settings.
|
||||
|
||||
To do this, navigate to ``/etc/init`` and edit the following files
|
||||
as described below:
|
||||
|
||||
``trove-taskmanager.conf``
|
||||
|
||||
``trove-conductor.conf``
|
||||
|
||||
(Note that, although they have the same names, these files are
|
||||
in a different location and have different content than the similarly
|
||||
named files you edited earlier in this procedure.)
|
||||
|
||||
In each file, find this line:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
exec start-stop-daemon --start --chdir /var/lib/trove \
|
||||
--chuid trove:trove --make-pidfile \
|
||||
--pidfile /var/run/trove/trove-conductor.pid \
|
||||
--exec /usr/bin/trove-conductor -- \
|
||||
--config-file=/etc/trove/trove.conf ${DAEMON_ARGS}
|
||||
|
||||
Note that ``--config-file`` incorrectly points to ``trove.conf``.
|
||||
|
||||
In ``trove-taskmanager.conf``, edit ``config-file`` to point to
|
||||
``/etc/trove/trove-taskmanager.conf``.
|
||||
|
||||
In ``trove-conductor.conf``, edit ``config-file`` to point to
|
||||
``/etc/trove/trove-conductor.conf``.
|
||||
|
||||
2. Restart the Database services:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# service trove-api restart
|
||||
# service trove-taskmanager restart
|
||||
# service trove-conductor restart
|
||||
|
||||
.. only:: rdo or obs
|
||||
|
||||
1. Start the Database services and configure them to start when
|
||||
the system boots:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl enable openstack-trove-api.service \
|
||||
openstack-trove-taskmanager.service \
|
||||
openstack-trove-conductor.service
|
||||
|
||||
# systemctl start openstack-trove-api.service \
|
||||
openstack-trove-taskmanager.service \
|
||||
openstack-trove-conductor.service
|
||||
|
@ -1,6 +0,0 @@
|
||||
.. _trove-next-steps:
|
||||
|
||||
Next steps
|
||||
~~~~~~~~~~
|
||||
|
||||
Your OpenStack environment now includes Database services.
|
@ -1,91 +0,0 @@
|
||||
.. _trove-verify:
|
||||
|
||||
Verify operation
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
Verify operation of the Database service.
|
||||
|
||||
.. note::
|
||||
|
||||
Perform these commands on the node where you installed trove.
|
||||
|
||||
#. Source the ``admin`` tenant credentials:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ . admin-openrc
|
||||
|
||||
#. Run the ``trove list`` command. You should see output similar to this:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ trove list
|
||||
+----+------+-----------+-------------------+--------+-----------+------+
|
||||
| id | name | datastore | datastore_version | status | flavor_id | size |
|
||||
+----+------+-----------+-------------------+--------+-----------+------+
|
||||
+----+------+-----------+-------------------+--------+-----------+------+
|
||||
|
||||
#. Add a datastore to trove:
|
||||
|
||||
* `Create a trove image <http://docs.openstack.org/developer/trove/dev/building_guest_images.html>`_.
|
||||
Create an image for the type of database you want to use, for example,
|
||||
MySQL, MongoDB, Cassandra.
|
||||
|
||||
This image must have the trove guest agent installed.
|
||||
|
||||
* Upload the image to glance. Example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ glance image-create --name "mysqlTest" --disk-format qcow2 \
|
||||
--container-format bare \
|
||||
--file mysql-5.6.qcow2
|
||||
+------------------+--------------------------------------+
|
||||
| Property | Value |
|
||||
+------------------+--------------------------------------+
|
||||
| checksum | 51a8e6e5ff10b08f2c2ec2953f0a8086 |
|
||||
| container_format | bare |
|
||||
| created_at | 2016-04-08T15:15:41Z |
|
||||
| disk_format | qcow2 |
|
||||
| id | 5caa76dd-f44b-4d01-a3b4-a111e27896be |
|
||||
| min_disk | 0 |
|
||||
| min_ram | 0 |
|
||||
| name | mysqlTest |
|
||||
| owner | 0c0bd5e850c24893b48c4cc01e2a7986 |
|
||||
| protected | False |
|
||||
| size | 533790720 |
|
||||
| status | active |
|
||||
| tags | [] |
|
||||
| updated_at | 2016-04-08T15:15:51Z |
|
||||
| virtual_size | None |
|
||||
| visibility | private |
|
||||
+------------------+--------------------------------------+
|
||||
|
||||
* Create a datastore. You need to create a separate datastore for
|
||||
each type of database you want to use, for example, MySQL, MongoDB,
|
||||
Cassandra. This example shows you how to create a datastore for a
|
||||
MySQL database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "trove-manage \
|
||||
--config-file /etc/trove/trove.conf \
|
||||
datastore_update mysql ''" trove
|
||||
...
|
||||
Datastore 'mysql' updated.
|
||||
|
||||
|
||||
#. Update the datastore to use the new image.
|
||||
|
||||
This example shows you how to update a MySQL 5.6 datastore:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "trove-manage --config-file /etc/trove/trove.conf \
|
||||
datastore_version_update \
|
||||
mysql mysql-5.6 mysql glance_image_ID '' 1" trove
|
||||
...
|
||||
Datastore version 'mysql-5.6' updated.
|
||||
|
||||
#. Create a database `instance
|
||||
<http://docs.openstack.org/user-guide/create_db.html>`_.
|
@ -1,13 +0,0 @@
|
||||
=====================
|
||||
Database service
|
||||
=====================
|
||||
|
||||
.. toctree::
|
||||
|
||||
common/get_started_database_service.rst
|
||||
trove-install.rst
|
||||
trove-verify.rst
|
||||
trove-next-steps.rst
|
||||
|
||||
The Database service (trove) provides cloud provisioning
|
||||
functionality for database engines.
|
Loading…
Reference in New Issue
Block a user