This is section describes the provisioning process and presents possible solutions for broken requests.
Before you begin
Before you continue you should read the Atomia Automation Server overview.
Overview
Whole provisioning process can be separated in two parts:
- Preparation phase
- Engine phase
Preparation phase
In this part of provisioning process Automation Server prepares data and creates set of actions that should be executed on resources. As a result of this phase we have services in Automation Server database that would look like at the end of provisioning process and set of commands for Automation Server Engine. If this phase fail exception will be thrown and database rollback will be executed and nothing will be saved to database. But lets explain provisioning process by example. Lets assume that user has only one complex service.
Now, user adds new child complex service. Automation Server will execute following database actions.
- New request in
provisioning_request
table will be added. - New item in
database_provisioning_commands
will be added. - Service
Service1
as parent service of service we are adding will be locked by this request (active_request column will hold ID of request). - New items in
service_logical_struct
anducp_services
(if needed) will be added (Services will be locked by this request too).
When service or package or account is locked by some request it cannot be used in other request. Let assume now that there is more then one simple services in init list of newly added service. Following database actions will be taken for each service:
- New item in
database_provisioning_commands
will be added. - New item in
simple_service_provisioning_actions
will be added. - New Service will be added in
service_logical_struct
anducp_services
(if needed)
So, for services (and actions) that will be executed on resource item in simple_service_provisioning_actions
table will be added.
And this is it. Request ID will be returned as a result of this phase. This request ID can be used to get status of provisioning (Pending, In Progress…)
After this phase services will looks like below.
So, all the services exist in the database, but on resource.
This request is now sent to Engine to execute provisioning operations on resource.
Engine phase
This is the place where real provisioning starts. First, engine checks if some simple service provisioning actions can be grouped (for example services can be provisioned using one call to resource). As a result resource commands are created.
Provisioning request change status form Pending to In Progress.
Now, Engine takes resource commands one by one and try to execute them. For every resource command following actions are executed:
- Execute property transformation for services involved in request
- Item in journal is added with status
InProgress
- Resource provisioning command change status to
InProgress
- Resource command is executed on resource.
- If resource command is successfully executed journal item is added with status
Ok
and resource provisioning command change status toOk
- If resource command failed journal item is added with status
Failed
In case of failing resource commands more then certain count automation server will start rollback procedure This procedure will:
- Execute rollback for every executed resource command
- Resource provisioning command change status to
RollBackInProgress
- Resource undo command is executed on resource.
- If undo resource command is successfully executed journal item is added with status
RollBackSuccessful
and resource provisioning command change status toFailed
- If undo resource command failed journal item is added with status
RollBackFailed
- Resource provisioning command change status to
At the end Automation Server update status of database provisioning commands and status of request.
In case that all Resource Command are successfully executed request will change status to Ok
In case of failing executing resource command but successfully executing all undo actions request will get status Failed
In case of failing executing resource command but failing executing all undo actions request will get status FailedRollbackError
If request is in status different then Ok
or Failed
status is not valid and requires some action from administrator. In such request services, packages or accounts are locked within request and cannot be used in other request.
Fixing broken requests
Request may not be in status Ok
or Failed
from various reasons. For example, IIS, Automation Server Engine, or machine has been restarted, or some of the resources has some problem etc… This is the situation where administrators action is required. UCPClient
and database knowledge is required.
- Find request and check what is the status of request. You can do this using
UCPClient
or database queryUCPClient
: inUCPClient
open account that is owner of this request. From menu selectRequests
|List requests
.- Execute following query in database:
select * from provisioning_request where provisioning_request.rid='00000000-0000-0000-0000-000000000007'
(correct request id should be used)
- Situation 1
- If status of request is
ProvisioningInProgress
provisioning process is interrupted. Administrator should check resource command status of last executed resource command (If there is no resource commands in progress next step can be proceeded). To see resource commands and it’s statuses following query can be executed:select * from resource_provisioning_commands where fk_rid='00000000-0000-0000-0000-000000000007' order by resource_cmd_id
To see resource commands with service properties, execute the following query:
SELECT resource_provisioning_commands.resource_cmd_id, resource_provisioning_commands.fk_rid, resource_provisioning_commands.command, resource_provisioning_commands.status, ucp_services.service_id, ucp_services.name, ucp_services.resource_name, ucp_services.status AS PhysicalServiceStatus, ucp_services.active_request, params.param_name, params.param_value, simple_service_provisioning_actions.action, simple_service_provisioning_actions.date_time, service_logical_struct.status AS LogicalServiceStatus FROM resource_provisioning_commands INNER JOIN simple_service_provisioning_actions ON resource_provisioning_commands.resource_cmd_id = simple_service_provisioning_actions.fk_resource_cmd_id INNER JOIN service_logical_struct ON simple_service_provisioning_actions.fk_logical_service_id = service_logical_struct.lid INNER JOIN ucp_services ON service_logical_struct.fk_sid = ucp_services.service_id INNER JOIN params ON ucp_services.service_id = params.fk_sid WHERE (resource_provisioning_commands.fk_rid = '00000000-0000-0000-0000-000000000007') ORDER BY resource_provisioning_commands.resource_cmd_id
A useful query can be to see provisioning journal:
SELECT provisioning_journal.*, resource_provisioning_commands.* FROM provisioning_journal INNER JOIN resource_provisioning_commands ON provisioning_journal.fk_cmd_id = resource_provisioning_commands.resource_cmd_id where resource_provisioning_commands.fk_rid='00000000-0000-0000-0000-000000000007' order by provisioning_journal.id
So, Administrator should use information collected using previous queries to compare status of services with real status of services (on resource) and decide if last executed resource command is executed successfully or not. Then status of resource command should be changed to
Ok
orPending
. - Use
UcpClient.exe
tool to continue this request. From menu select Requests | List requests and choose request. Right click on it and choose “Continue request”.
- If status of request is
- Situation 2
- If status of request is
RollbackInProgress
provisioning process has failed and rollback started but it is interrupted. Like in previous situation Administrator should check real state of services on resources. If rollback is successfully done (for example if command was for adding service and if service does not exist rollback has successfully done) then resource command should get statusFailedUndoDone
. If rollback is not done then last resource command should have statusOk
. - Use
UcpClient.exe
tool to continue this request. From menu select Requests | List requests and choose request. Right click on it and choose “Continue request”.
- If status of request is
- Situation 3
- If status of request is
FailedRollbackError
provisioning process has failed and rollback started but it rollback failed too. We should fix rollback problem and check status of last executed resource command and update it. - Use
UcpClient.exe
tool to continue this request. From menu select Requests | List requests and choose request. Right click on it and choose “Continue request”.
- If status of request is