Trove/ResourceManagerInterface
Description
This feature makes three change to the behavior of Trove.
Nova/Cinder/Neutron/Designate aka Natives
Simple interface for the implementation of the resource managements, such as:
- Instances(instance groups).
- Volumes (cinder or ephemeral).
- Network attributes (SGs, floating IPs, NICS).
- DNS records.
Heat and Nova/Cinder/Designate implementation of the Resource manager
Heat and Nova/Cinder/Designate implementation of the Resource manager will cover all methods that are presented in Trove now, such as:
- Provisioning.
- Resizing instances (flavor).
- Resizing volumes.
- DNS records management.
- Security group/rules management
Justification/Benefits
Justification
Heat allows to work with almost all types of the resources that Trove requires, but Trove does it separately with each resource delivery service (nova/cinder/designate). Since Heat is a cloud orchestration tools Trove needs to work with it as the single dependency instead of relaying to each service at the same time.
Benefits of Resource manager interface
The restriction that is being described by the resource manager will make developers to follow provided specification while implementing resource managers (heat or nova/cinder/designate).
Scope
Heat should be able to accomplish all tasks required by Trove.
Impacts
From a user’s perspective this feature doesn't change any of the expectations and behavior. From deployer perspective:
- If updating already running deployed Trove then you would need to use migration manager.
- If setuping fresh new Trove - use orchestrator manager.
Configuration
This configuration parameters are related to trove-api and trove-taskmanager
Parameter name | Config value | Resource managers mapping |
---|---|---|
resource_manager | orchestrator or native and migration |
{ "orchestrator": "trove.taskmanager.orchestrator.Orchestrator", "native": "trove.taskmanager.native.Native" "migration": "trove.taskamanger.migration.Migration" } |
Database
There are no expected changes to the database
Column name | Attribute type | Which model is being extended |
---|---|---|
provisioning_engine | String | Base instance mode (DBInstance model) |
Public API
No changes
Internal API
No changes
Guest Agent
No changes
Resource manager under the hood
Resource manager interface is nothing else than class with required abstract methods.
Way to implement it
Among all services (api, tm, conductor, guestagent) the most suitable please to refactor code is the taskmanager.
How taskmanager works
Taskmanager works upon manager class that presented inside the configuration file.
- taskmanager_manager is set as trove.taskmanager.manager.Manager
https://github.com/openstack/trove/blob/master/trove/cmd/taskmanager.py#L33 https://github.com/openstack-dev/devstack/blob/master/lib/trove#L166
- Current taskmanager manager is the mixing of the orechestrator and native client use. It should be splitted into the two different bruches, two resource management drivers, one for nova/cinder/neutron/designate and another one for _only_ heat. Since now all resources are managed according USE_TROVE flag it would be easy to do this. From the first implementation heat branch will be the experimental branch that requires CI job.