Provisioning

From DreamFactory
Jump to: navigation, search
m (Provisioners)
m
Line 1: Line 1:
== Introduction ==
 
The DFE provisioning sub-system is responsible for all instance management tasks. When an instance service request is received by the Console, it is dispatched to the provisioning system for resolution. The resolution may result in a success or failure depending on the request and the provisioner requested.
 
 
 
== Provisioners ==
 
== Provisioners ==
 
In the DFE world, a *provisioner* represents a contract to: manage instances, in a virtual environment, in a specific manner. This is physically represented in code by classes that adhere to one or more pre-defined interfaces. The diagram below shows the **DreamFactory** instance provisioner in code form.
 
In the DFE world, a *provisioner* represents a contract to: manage instances, in a virtual environment, in a specific manner. This is physically represented in code by classes that adhere to one or more pre-defined interfaces. The diagram below shows the **DreamFactory** instance provisioner in code form.
Line 9: Line 6:
 
Each provisioner is comprised of one or more *services* which provide portions of the provisioning process. This is not necessary. Provisioning may be completed by a single service. However, for flexibility and future expansion, the provisioning system is driven completely by configuration and discovery.
 
Each provisioner is comprised of one or more *services* which provide portions of the provisioning process. This is not necessary. Provisioning may be completed by a single service. However, 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.
+
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*.
 +
 
 +
In the DFE world, each **DreamFactory** instance requires provisioning management, storage facilities, and database access. These individual parts are managed by the three separate sub-provisioners defined in the library, and sub-sequential configuration. The default/shipping configuration is shown below.
 +
 +
<pre>
 +
<?php
 +
//******************************************************************************
 +
//* The instance provisioners available from this console
 +
//******************************************************************************
 +
use DreamFactory\Enterprise\Common\Enums\PortableTypes;
 +
 
 +
return [
 +
    //  The default provisioner
 +
    'default' => 'dreamfactory',
 +
    //  The provisioners, or "hosts" of our instances, or "guests".
 +
    'hosts'  => [
 +
        /** DreamFactory v2.x */
 +
        'dreamfactory' => [
 +
            /********************************************************************************
 +
            * The namespace for our provisioning classes. This is optional and you may specify
 +
            * fully qualified class names in the "provides" section. You cannot mix and match
 +
            * however. If an "namespace" key exists, it will be pre-pended to all provisioner
 +
            * classes.
 +
            ********************************************************************************/
 +
            /** 'namespace'    => 'App\Provisioners\Acme, */
 +
            /********************************************************************************
 +
            * Each provisioner has a set of "sub-provisioners". The important one is the
 +
            * "instance" provisioner. Also required are two standard sub-provisioners.
 +
            *
 +
            * The first is "storage" which is the class responsible for instance storage
 +
            * provisioning. The second is "db", or the class/service responsible for instance
 +
            * database provisioning. Currently, all three (instance,db,storage) are required.
 +
            * However, even though the methods are required to exist by the contract, they
 +
            * may have empty method bodies and do nothing.
 +
            *
 +
            * Any of these "resource" sub-provisioners may implement the "PortableData"
 +
            * interface, making them available for import/export services from the console and
 +
            * dashboard. The "dreamfactory" provisioner does this and offers import/export services
 +
            * through the provisioning sub-system.
 +
            *
 +
            * Developers may add additional sub-provisioners to the list in their own
 +
            * provisioner host class.
 +
            ********************************************************************************/
 +
            '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,
 +
            ],
 +
            /********************************************************************************
 +
            * Provisioners may provide "offerings" or options that dictate certain features of
 +
            * the available guest(s). Selecting a version for instance (as below). It can be
 +
            * used for anything and provides an automatic UI in the Dashboard for user selection.
 +
            ********************************************************************************/
 +
            'offerings'    => [],
 +
            /** The instance-provided resource discovery uri */
 +
            'resource-uri' => '/api/v2/system/',
 +
        ],
 +
    ],
 +
];
 +
</pre>
 +
 
 +
The `provides` section details the sub-provisioners available with this provisioner configuration. As you see, there are the three discussed: instance, storage, and database. The order is not important because, in this case, the InstanceProvisioner class makes the sub-provisioning requests.
 +
 
 +
The `offerings` section allows a provisioner to provide options, or *offerings*, to the requestor regarding the provisioning of instances. A different version number perhaps, or data "tags" and/or text.

Revision as of 01:17, 14 September 2015

Provisioners

In the DFE world, a *provisioner* represents a contract to: manage instances, in a virtual environment, in a specific manner. This is physically represented in code by classes that adhere to one or more pre-defined interfaces. The diagram below shows the **DreamFactory** instance provisioner in code form.

Dfe-software-provisioning.png

Each provisioner is comprised of one or more *services* which provide portions of the provisioning process. This is not necessary. Provisioning may be completed by a single service. However, 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*.

In the DFE world, each **DreamFactory** instance requires provisioning management, storage facilities, and database access. These individual parts are managed by the three separate sub-provisioners defined in the library, and sub-sequential configuration. The default/shipping configuration is shown below.

<?php
//******************************************************************************
//* The instance provisioners available from this console
//******************************************************************************
use DreamFactory\Enterprise\Common\Enums\PortableTypes;

return [
    //  The default provisioner
    'default' => 'dreamfactory',
    //  The provisioners, or "hosts" of our instances, or "guests".
    'hosts'   => [
        /** DreamFactory v2.x */
        'dreamfactory' => [
            /********************************************************************************
             * The namespace for our provisioning classes. This is optional and you may specify
             * fully qualified class names in the "provides" section. You cannot mix and match
             * however. If an "namespace" key exists, it will be pre-pended to all provisioner
             * classes.
             ********************************************************************************/
            /** 'namespace'    => 'App\Provisioners\Acme, */
            /********************************************************************************
             * Each provisioner has a set of "sub-provisioners". The important one is the
             * "instance" provisioner. Also required are two standard sub-provisioners.
             *
             * The first is "storage" which is the class responsible for instance storage
             * provisioning. The second is "db", or the class/service responsible for instance
             * database provisioning. Currently, all three (instance,db,storage) are required.
             * However, even though the methods are required to exist by the contract, they
             * may have empty method bodies and do nothing.
             *
             * Any of these "resource" sub-provisioners may implement the "PortableData"
             * interface, making them available for import/export services from the console and
             * dashboard. The "dreamfactory" provisioner does this and offers import/export services
             * through the provisioning sub-system.
             *
             * Developers may add additional sub-provisioners to the list in their own
             * provisioner host class.
             ********************************************************************************/
            '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,
            ],
            /********************************************************************************
             * Provisioners may provide "offerings" or options that dictate certain features of
             * the available guest(s). Selecting a version for instance (as below). It can be
             * used for anything and provides an automatic UI in the Dashboard for user selection.
             ********************************************************************************/
            'offerings'    => [],
            /** The instance-provided resource discovery uri */
            'resource-uri' => '/api/v2/system/',
        ],
    ],
];

The `provides` section details the sub-provisioners available with this provisioner configuration. As you see, there are the three discussed: instance, storage, and database. The order is not important because, in this case, the InstanceProvisioner class makes the sub-provisioning requests.

The `offerings` section allows a provisioner to provide options, or *offerings*, to the requestor regarding the provisioning of instances. A different version number perhaps, or data "tags" and/or text.