Provisioning
Contents
Provisioners
In DFE, a provisioner represents a contract to manage virtual instances in a specific manner. This is physically represented in code by classes that adhere to one or more pre-defined interfaces. Below is the class/UML diagram of the DreamFactory provisioner.
Each provisioner is comprised of one or more sub-provisioners which each provide a slice of the provisioning process. This is my no means necessary, and provisioning may be completed by a single service. For flexibility and future expansion, the provisioning system is driven completely by configuration and discovery.
The default DreamFactory provisioner is installed via composer using the dreamfactory/dfe-dreamfactory-provisioner
package. This package consists of a service which adheres to the provisioning contracts stated above, and can be used to create and manage instances. It consists of three sub-provisioners. These are the instance, storage, and database.
To enable this provisioner, a section is added to the config/provisioners.php
configuration file as shown below. This example stanza lives within the provisioners.hosts
config array.
'dreamfactory' => [
'provides' => [
PortableTypes::INSTANCE => DreamFactory\Enterprise\Provisioners\DreamFactory\InstanceProvisioner::class,
PortableTypes::STORAGE => DreamFactory\Enterprise\Provisioners\DreamFactory\StorageProvisioner::class,
PortableTypes::DATABASE => DreamFactory\Enterprise\Provisioners\DreamFactory\DatabaseProvisioner::class,
],
'offerings' => [],
'resource-uri' => DreamFactory\Enterprise\Provisioners\DreamFactory\InstanceProvisioner::RESOURCE_URI,
],
The top level is the mnemonic name of the provisioner, dreamfactory in this case. This may contain the following elements:
-
provides
: an array of sub-provisioners that make up the entire provisioner. The dreamfactory provisioner consists of three sub-provisioners: instance, storage, and database. -
offerings
: an array of options that are provided to the end-user during provisioning. These can be versions or other feature selections offered by the guest location and/or instance. -
resource-uri
: an endpoint at the provisioned instance where the console can communicate with it.
Provisioning Management System
The provisioning management system, or PMS, consists of the ProvisionManager class and its Provision facade. It resolves and oversees all provisioning requests.
Available Services
The PMS provides the following services:
-
provision
-
deprovision
-
import
-
export
Each service is passed a request, or job, as the first argument. These jobs are ProvisionJob
, DeprovisionJob
, ImportJob
, and ExportJob
respectively. Below is the class diagram for the four main job types. All services are eligible to be queued.
REST Access
All PMS services are available via the Console's RESTful API. Please see the REST API section for further details. The endpoints are as follows:
-
/api/v1/ops/provision
-
/api/v1/ops/deprovision
-
/api/v1/ops/import
-
/api/v1/ops/export
An eligible client is required to make these requests. The dreamfactory/dfe-ops-client
package provides this service to any client.
Command Line Access
All PMS services are available via command line as well. The following artisan commands are provided for this purpose:
-
dfe:provision [-c,--cluster-id=CLUSTER_ID] [-p,--packages=PACKAGES] [-t,--owner-type=OWNER_TYPE_] [--] <owner-id> <instance-id> [<guest-location>]
-
dfe:deprovision [--cluster-id=CLUSTER_ID] [--] <instance-id>
-
dfe:import [--cluster-id=CLUSTER_ID] [--snapshot-id] [--owner-type=OWNER_TYPE] [--] <owner-id> <instance-id> <snapshot> [<guest-location>]
-
dfe:export [--destination=DESTINATION] [--] <instance-id>
All commands must be run from the DFE Console installation directory.
Events
Each of the four services, and their associated sub-services, will throw an event upon completion of the current task. One may create handlers to listen, and/or respond, to fired events. All events will receive a reference to the requesting service and the original request. The available events are:
- dfe.provisioned
- dfe.storage.provisioned
- dfe.database.provisioned
- dfe.deprovisioned
- dfe.storage.deprovisioned
- dfe.database.deprovisioned
- dfe.imported
- dfe.storage.imported
- dfe.database.imported
- dfe.exported
- dfe.storage.exported
- dfe.database.exported